Раньше, когда вы хотели увидеть, содержит ли ваша строка Swift другую строку, вы должны передать ее в NSString и вызвать .containsString. Apple, в своей бесконечной мудрости, сделала эту версию осведомленной, поэтому, если вы попробуете ее под S2, она потребует # доступную оболочку, даже если ваша целевая платформа поддерживает ее (что, я думаю, является ошибкой)..containsString в Swift 2?
ответ
Таким образом, лучшее решение, как представляется, это:
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)
}
}
Различные методы подписи на основе целых чисел также были опубликованы в ответах на http://stackoverflow.com/questions/24092884/get-nth-character-of-a-string-in-swift-programming-language. –
- 1. Cloud Code - containsString
- 2. NSString containsString crashes
- 3. Query Parse containsString делает нечувствительным
- 4. ios-sim перестала работать «ошибка NSCFString containsString»
- 5. использование # в Swift 2
- 6. Перечисления в Swift 2
- 7. Swift 1.2 -> Swift 2
- 8. Преобразование Swift 1.2 в Swift 2
- 9. Swift: Преобразование из Swift 2 в Swift 3 Неудача
- 10. Ошибка делегата в swift 2
- 11. фильтр AnyObject в Swift 2
- 12. NSDateFormatter в IOS SWIFT 2
- 13. Реализация аксессуараButtonTappedForRowWithIndexPath: в Swift 2
- 14. Расширение массива в Swift 2
- 15. Свойства инициализации в Swift 2
- 16. HMAC шифрования в Swift 2
- 17. Swift 2: охранник в петле?
- 18. Игра в Swift 2 - "touchhesBegan"?
- 19. Изменение массива в Swift 2
- 20. Строковые индексы в Swift 2
- 21. Открытый ключ в Swift 2
- 22. Создать MTAudioProcessingTapCallbacks в Swift 2
- 23. хранение Int в swift 2
- 24. обработка ошибок в Swift 2
- 25. 2 десятичный таймер в swift
- 26. Проблема инициализации в Swift 2
- 27. Ошибка SIGABRT в swift 2
- 28. Создание класса в Swift 2
- 29. UITextInputMode.activeInputModes() сбоев в Swift 2
- 30. Использование NSTimer.scheduledTimerWithTimeInterval в Swift 2
Почему бы вам просто не использовать 'rangeOfString()' без каких-либо переходов на 'NSString'? Это работает со всеми текущими версиями Swift. –