Nhìn vào các câu hỏi về cách thực hiện điều này bằng các ngôn ngữ khác (chẳng hạn như this accepted answer đối với Ruby) có vẻ như kỹ thuật chung là xác định xem mỗi ký tự trong chuỗi có nằm trong dải CJK hay không. Câu trả lời ruby có thể được điều chỉnh theo các chuỗi Swift dưới dạng mở rộng với mã sau:
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
Phạm vi có thể tồn tại ở một nơi nào đó thay vì mã hóa chúng theo cách thủ công.
Trên đây là dành cho Swift 2.0, cho trước đó, bạn sẽ phải sử dụng miễn phí contains
chức năng chứ không phải là mở rộng giao thức (hai lần):
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) }
}
}
}
Nguồn
2015-07-06 11:41:53
và có anyway tôi có thể nhận được chỉ là những từ Trung Quốc? Cảm ơn! – Arefly
@Arefly: Thật không may, tôi không phải là chuyên gia về ngôn ngữ Trung Quốc, tôi đã "mù quáng" dịch mã Ruby :) Ngoài ra còn có các thuộc tính "Katakana" và "Hiragana", nhưng tôi không biết chúng có thuộc loại nào không sử dụng. –
@Arefly: Để kiểm soát chi tiết hơn, câu trả lời của Airspeed Velocity có thể phù hợp hơn vì bạn có thể điều chỉnh bảng với phạm vi Unicode theo nhu cầu của bạn, chẳng hạn như "chỉ các ký tự tiếng Trung". –