Zeichen - Eine Instanzeigenschaft von String, wird mit Xcode 9.1 veraltet.
Es war sehr nützlich, mithilfe der characters
-Eigenschaft einen Teilstring von String zu erhalten. Jetzt wurde er jedoch als veraltet eingestuft, und Xcode empfiehlt die Verwendung von substring
. Ich habe versucht, SO - Fragen und Apple Entwickler-Tutorials/Richtlinien für das gleiche zu überprüfen. Kann aber keine Lösung/Alternative sehen, wie vorgeschlagen.
Hier ist eine Warnmeldung:
'Zeichen' ist veraltet: Bitte verwenden Sie Zeichenfolge oder Unterzeichenfolge.
Ich habe so viele String-Vorgänge mit der Eigenschaft characters
ausgeführt.
Hat jemand eine Idee/Info zu diesem Update?
In Swift 4 wurden Änderungen an der String-API vorgenommen.
Sie können einfach !stringValue.isEmpty
anstelle von stringValue.characters.count > 0
verwenden.
weitere Informationen erhalten Sie von hier
z.B.
let edit = "Summary"
edit.count // 7
Beispiele für 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
Einer der häufigsten Fälle für die Manipulation von Zeichenfolgen sind JSON-Antworten. In diesem Beispiel habe ich in meiner Watch-App eine Erweiterung erstellt, um die letzten (n) Zeichen eines Bitcoin-JSON-Objekts zu löschen.
Swift 3:
func dropLast(_ n: Int = 0) -> String {
return String(characters.dropLast(n))
Xcode 9.1 Fehlermeldung:
'characters' ist veraltet: Bitte verwenden Sie String oder Substring direkt
Xcode fordert uns auf, die Stringvariable oder Methode direkt zu verwenden.
Swift 4:
func dropLast(_ n: Int = 0) -> String {
return String(dropLast(n))
}
Komplette Erweiterung:
extension String {
func dropLast(_ n: Int = 0) -> String {
return String(dropLast(n))
}
var dropLast: String {
return dropLast()
}
}
Anruf:
print("rate:\(response.USDRate)")
let literalMarketPrice = response.USDRate.dropLast(2)
print("literal market price: \(literalMarketPrice)")
Konsole:
//rate:7,101.0888 //JSON float
//literal market price: 7,101.08 // JSON string literal
Zusätzliche Beispiele:
print("Spell has \(invisibleSpellName.count) characters.")
return String(dropLast(n))
return String(removeLast(n))
Dokumentation:
Häufig verwenden Sie allgemeine Methoden wie dropLast()
oder removeLast()
oder count
. Hier finden Sie also die explizite Dokumentation Apple) für jede dieser Methoden Methode.
Diese Warnung ist nur eine Spitze des Eisbergs, es gab eine Fülle von Änderungen an den Saiten, die Saiten sind wieder eine Ansammlung von Charakteren, aber wir haben so ziemlich alles neue und coole SubStrings bekommen :)
Dies ist eine großartige Lektüre dazu: https://useyourloaf.com/blog/updating-strings-for-Swift-4/
Verwenden Sie diese characters
, da String
keine Sammlung in Swift 2.0 mehr darstellt. Dies ist jedoch immer noch in Swift 4 gültig, ist aber jetzt nicht mehr erforderlich, da String
wieder eine Collection
ist.
Zum Beispiel hat eine Swift 4 String
jetzt eine direkte count-Eigenschaft, die die Anzahl der Zeichen angibt:
// Swift 4
let spString = "Stack"
spString.count // 5
Beispiele für String und SubString.
String
Swift 4 String
holt jetzt direkt das Element, das den ersten Buchstaben von String enthält: (string.characters.first)
let spString = "Stack"
let firstElement = spString.first //S
SubString
Mit SubString erhalten Sie den ersten Buchstaben.
let spstring = "Welcome"
let indexStartOfText = spstring.index(spstring.startIndex, offsetBy: 1)
let sub = spstring.substring(to: indexStartOfText)
print(sub) //W
Sie können diesen Code auch zur Gruppierung von Wörterbüchern verwenden, ohne {$ 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)