2015-06-18 2 views
0

Раньше, когда вы хотели увидеть, содержит ли ваша строка Swift другую строку, вы должны передать ее в NSString и вызвать .containsString. Apple, в своей бесконечной мудрости, сделала эту версию осведомленной, поэтому, если вы попробуете ее под S2, она потребует # доступную оболочку, даже если ваша целевая платформа поддерживает ее (что, я думаю, является ошибкой)..containsString в Swift 2?

+1

Почему бы вам просто не использовать 'rangeOfString()' без каких-либо переходов на 'NSString'? Это работает со всеми текущими версиями Swift. –

ответ

1

Таким образом, лучшее решение, как представляется, это:

extension String { 
    func contains(substr: String) -> Bool { 
     if #available(OSX 10.10, *) { 
      return NSString(string: self).containsString(substr) 
     } else { 
      return self.rangeOfString(substr) != nil 
     } 
    } 
} 

и теперь, чтобы проверить это, вместо этого:

if NSString(string: line).containsString(" ")... 

вы получите использовать более качественные:

if line.contains(" ")... 

Это больше не жалуется на версию, и (IMHO) выглядит лучше. Вы почти наверняка хотите, это тоже:

extension String { 
    var length: Int { 
     return self.characters.count 
    } 
} 

Apple, постоянно меняется, как вы получите длину, и я надеюсь, что любые будущие изменения в API будет #available -able, в какой момент .length может быть легко изменен. И это только для здравомыслия:

extension String { 
    subscript (r: Range<Int>) -> String { 
     get { 
      let subStart = advance(self.startIndex, r.startIndex, self.endIndex) 
      let subEnd = advance(subStart, r.endIndex - r.startIndex, self.endIndex) 
      return self.substringWithRange(Range(start: subStart, end: subEnd)) 
     } 
    } 
    func substring(from: Int) -> String { 
     let end = self.characters.count 
     return self[from..<end] 
    } 
    func substring(from: Int, length: Int) -> String { 
     let end = from + length 
     return self[from..<end] 
    } 
} 

extension String { 
    func trim() -> String { 
     return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) 
    } 
    func trim(withSet: NSCharacterSet) -> String { 
     return self.stringByTrimmingCharactersInSet(withSet) 
    } 
} 
+0

Различные методы подписи на основе целых чисел также были опубликованы в ответах на http://stackoverflow.com/questions/24092884/get-nth-character-of-a-string-in-swift-programming-language. –

Смежные вопросы