Wie entferne String
ich in Swift diakritische Zeichen (oder Akzente) aus einem (wie zum Beispiel "één" in "een" ändern)? Muss ich zurück zu NSString
oder kann es in Swift gemacht werden?
Wie entferne String
ich in Swift diakritische Zeichen (oder Akzente) aus einem (wie zum Beispiel "één" in "een" ändern)? Muss ich zurück zu NSString
oder 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: nil
die allgemeinen Unicode-Regeln und locale: .current
die 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)
}
}