Wie entferne Stringich in Swift diakritische Zeichen (oder Akzente) aus einem (wie zum Beispiel "één" in "een" ändern)? Muss ich zurück zu NSStringoder kann es in Swift gemacht werden?
Wie entferne Stringich in Swift diakritische Zeichen (oder Akzente) aus einem (wie zum Beispiel "één" in "een" ändern)? Muss ich zurück zu NSStringoder kann es in Swift gemacht werden?
Antworten:
Sie können direkt mit einem Swift arbeiten String(wenn "Foundation" importiert wird):
let foo = "één"
let bar = foo.stringByFoldingWithOptions(.DiacriticInsensitiveSearch, locale: NSLocale.currentLocale())
print(bar) // een
Swift 3:
let foo = "één"
let bar = foo.folding(options: .diacriticInsensitive, locale: .current)
print(bar) // een
Łund L.
locale: nildie allgemeinen Unicode-Regeln und locale: .currentdie der aktuellen Sprachen angewendet werden . Aber ich habe es nicht getestet.
Update auf die Antwort von @ MartinR… eine Swift 3- Erweiterung, um eine Zeichenfolge zum Sortieren / Suchen bereitzustellen, die für jemanden nützlich sein könnte…
extension String {
var forSorting: String {
let simple = folding(options: [.diacriticInsensitive, .widthInsensitive, .caseInsensitive], locale: nil)
let nonAlphaNumeric = CharacterSet.alphanumerics.inverted
return simple.components(separatedBy: nonAlphaNumeric).joined(separator: "")
}
}
z.B
print("Mÿ nâMe ís jÄço´B".forSorting) // "mynameisjacob"
localizedStandardCompare.
Antwort Update für Swift 5.0.1
func toNoSmartQuotes() -> String {
let userInput: String = self
return userInput.folding(options: .diacriticInsensitive, locale: .current)
}
und benutze es someTextField.text.toNoSmartQuotes()
Das ist meine Lösung
Swift 5
extension String {
func unaccent() -> String {
return self.folding(options: .diacriticInsensitive, locale: .current)
}
}