Wenn man sich fragt, wie man das in anderen Sprachen macht (wie this accepted answer für Ruby), sieht es aus, als ob die übliche Technik darin besteht, zu bestimmen, ob jedes Zeichen in der Zeichenfolge in den CJK-Bereich fällt. Der Rubin Antwort könnte mit dem folgenden Code zu Swift Strings als Erweiterung angepasst werden:
extension String {
var containsChineseCharacters: Bool {
return self.unicodeScalars.contains { scalar in
let cjkRanges: [ClosedInterval<UInt32>] = [
0x4E00...0x9FFF, // main block
0x3400...0x4DBF, // extended block A
0x20000...0x2A6DF, // extended block B
0x2A700...0x2B73F, // extended block C
]
return cjkRanges.contains { $0.contains(scalar.value) }
}
}
}
// true:
"Hi! 大家好!It's contains Chinese!".containsChineseCharacters
// false:
"Hello, world!".containsChineseCharacters
Die Bereiche bereits in Foundation existieren können irgendwo, anstatt sie manuell zu.
Die oben ist für Swift 2.0, für früher, werden Sie die freie contains
Funktion anstatt die Protokollerweiterung (zweimal) verwenden müssen:
extension String {
var containsChineseCharacters: Bool {
return contains(self.unicodeScalars) {
// older version of compiler seems to need extra help with type inference
(scalar: UnicodeScalar)->Bool in
let cjkRanges: [ClosedInterval<UInt32>] = [
0x4E00...0x9FFF, // main block
0x3400...0x4DBF, // extended block A
0x20000...0x2A6DF, // extended block B
0x2A700...0x2B73F, // extended block C
]
return contains(cjkRanges) { $0.contains(scalar.value) }
}
}
}
und gibt es sowieso ich kann nur die chinesischen Wörter bekommen? Vielen Dank! – Arefly
@Arefly: Leider bin ich kein Experte für die chinesische Sprache, ich habe "blind" den Ruby Code übersetzt :) Es gibt auch "Katakana" und "Hiragana" Eigenschaften, aber ich weiß nicht, ob sie von irgendwelchen sind benutzen. –
@Arefly: Für eine detailliertere Steuerung ist die Antwort von Airspeed Velocity möglicherweise besser geeignet, da Sie die Tabelle mit den Unicode-Bereichen entsprechend Ihren Anforderungen anpassen können, z. B. "nur chinesische Zeichen". –