Предупреждение: "символы" устарели: используйте String или Substring напрямую
characters - свойство экземпляра String, устарело с Xcode 9.1 (beta)
Это/очень полезное свойство, чтобы получить подстроку из String, но не устаревать, а Xcode предлагает использовать substring
. Я попытался проверить вопросы SO и учебные пособия для разработчиков Apple/рекомендации для них. Но не видел никакого решения/альтернативного, как предполагалось.
Вот предупреждение:
"символы" устарели: используйте String или Substring
![введите описание изображения здесь]()
У меня так много операций с строкой выполняются/обрабатываются с помощью свойства characters
.
У кого-нибудь есть идея/информация об этом обновлении?
Ответы
Ответ 1
Swift 4 представил изменения в API-интерфейсе строки.
Вы можете использовать !stringValue.isEmpty
вместо stringValue.characters.count > 0
для получения дополнительной информации вы получите образец из здесь
например,
let edit = "Summary"
edit.count // 7
Ответ 2
Swift 4 vs Swift 3 примеры:
let myString = "test"
for char in myString.characters {print(char) } // Swift 3
for char in myString { print(char) } // Swift 4
let length = myString.characters.count // Swift 3
let length = myString.count // Swift 4
Ответ 3
Это предупреждение - это всего лишь вершина айсберга, там были лут строковых изменений, строки снова представляют собой набор персонажей, но у нас есть новые и классные подстроки:)
Это замечательно прочитать об этом:
https://useyourloaf.com/blog/updating-strings-for-swift-4/
Ответ 4
Один из наиболее распространенных случаев манипулирования строками - это ответы JSON. В этом примере я создал расширение в приложении watch, чтобы удалить последние (n) символы объекта Bitcoin JSON.
Swift 3:
func dropLast(_ n: Int = 0) -> String {
return String(characters.dropLast(n))
Xcode 9.1 Сообщение об ошибке:
'characters' устарел: используйте строку или подстроку напрямую
Xcode сообщает нам использовать строковую переменную или метод напрямую.
Swift 4:
func dropLast(_ n: Int = 0) -> String {
return String(dropLast(n))
}
Полное расширение:
extension String {
func dropLast(_ n: Int = 0) -> String {
return String(dropLast(n))
}
var dropLast: String {
return dropLast()
}
}
Вызов:
print("rate:\(response.USDRate)")
let literalMarketPrice = response.USDRate.dropLast(2)
print("literal market price: \(literalMarketPrice)")
Консоль:
//rate:7,101.0888 //JSON float
//literal market price: 7,101.08 // JSON string literal
Дополнительные примеры:
-
print("Spell has \(invisibleSpellName.count) characters.")
-
return String(dropLast(n))
-
return String(removeLast(n))
Документация:
Часто вы будете использовать общие методы, такие как dropLast()
или removeLast()
или count
, поэтому здесь явная документация Apple для каждого метода.
droplast()
removeelast()
подсчет символов