wake-up-neo.net

warnung: 'Zeichen' ist veraltet: Bitte verwenden Sie direkt Zeichenfolge oder Teilzeichenfolge

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.

 enter image description here

Ich habe so viele String-Vorgänge mit der Eigenschaft characters ausgeführt.

Hat jemand eine Idee/Info zu diesem Update?

133
Krunal

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
237
songxunzhao

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.

droplast ()

removelast ()

Zeichen zählen

8
tymac

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/

2
Boris

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
1
Pranavan Sp

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)
0