ios - advertencia: los ''caracteres'' están en desuso: utilice String o Substring directamente
swift4 xcode9.1 (6)
Esa advertencia es solo una parte superior del iceberg, hubo una gran cantidad de cambios de cadena, las cadenas son nuevamente una colección de caracteres, pero tenemos algo nuevo y genial, subStrings :)
Esta es una gran lectura sobre esto: https://useyourloaf.com/blog/updating-strings-for-swift-4/
characters - una propiedad de instancia de String, está en desuso con Xcode 9.1
Fue muy útil obtener una subcadena de String usando la propiedad de
characters
, pero ahora ha quedado en desuso y Xcode sugiere usar la
substring
.
He tratado de verificar las preguntas SO y los tutoriales / pautas para desarrolladores de Apple para lo mismo.
Pero no pude ver ninguna solución / alternativa como se sugiere.
Aquí hay un mensaje de advertencia:
''caracteres'' están en desuso: utilice String o Substring
Tengo tantas operaciones de cadena que se realizan / manejan utilizando
characters
propiedad.
¿Alguien tiene alguna idea / información sobre esta actualización?
Swift 4 introdujo cambios en la cadena de API.
Puede usar
!stringValue.isEmpty
lugar de
stringValue.characters.count > 0
para obtener más información, obtenga la muestra desde aquí
por ej.
let edit = "Summary"
edit.count // 7
Swift 4 vs Swift 3 ejemplos:
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
También puede usar este código para agrupar el diccionario sin usar {$ 0.characters.first! }.
let cities = ["Shanghai": 24_256_800, "Karachi": 23_500_000, "Beijing": 21_516_000, "Seoul": 9_995_000]
let groupedCities = Dictionary(grouping: cities.keys) { $0.first! }
print(groupedCities)
Uno de los casos más comunes para manipular cadenas es con respuestas JSON. En este ejemplo, creé una extensión en mi aplicación de reloj para soltar los últimos (n) caracteres de un objeto JSON de Bitcoin.
Swift 3:
func dropLast(_ n: Int = 0) -> String {
return String(characters.dropLast(n))
Mensaje de error de Xcode 9.1:
los ''caracteres'' están en desuso: utilice String o Substring directamente
Xcode nos dice que usemos la variable de cadena o el método
directamente
.
Swift 4:
func dropLast(_ n: Int = 0) -> String {
return String(dropLast(n))
}
Extensión completa:
extension String {
func dropLast(_ n: Int = 0) -> String {
return String(dropLast(n))
}
var dropLast: String {
return dropLast()
}
}
Llamada:
print("rate:/(response.USDRate)")
let literalMarketPrice = response.USDRate.dropLast(2)
print("literal market price: /(literalMarketPrice)")
Consola:
//rate:7,101.0888 //JSON float
//literal market price: 7,101.08 // JSON string literal
Ejemplos adicionales:
-
print("Spell has /(invisibleSpellName.count) characters.")
-
return String(dropLast(n))
-
return String(removeLast(n))
Documentación:
A menudo utilizará métodos comunes como
dropLast()
o
removeLast()
o
count
así que aquí está la documentación explícita de Apple para cada método.
Utilice estos
characters
porque
String
dejó de ser una colección en Swift 2.0.
Sin embargo, esto sigue siendo un código válido en Swift 4, pero ya no es necesario ahora que
String
es una
Collection
nuevamente.
Por ejemplo, una
String
Swift 4 ahora tiene una propiedad de recuento directo que le da el recuento de caracteres:
// Swift 4
let spString = "Stack"
spString.count // 5
Ejemplos para String y SubString.
Cuerda
Swift 4
String
ahora obtiene directamente Element que le da el primer carácter de String:
(string.characters.first)
let spString = "Stack"
let firstElement = spString.first //S
Subcadena
Usando SubString obtén el primer carácter.
let spstring = "Welcome"
let indexStartOfText = spstring.index(spstring.startIndex, offsetBy: 1)
let sub = spstring.substring(to: indexStartOfText)
print(sub) //W