【发布时间】:2017-05-24 23:31:40
【问题描述】:
我试图使用 CharacterSet 检查用户输入的字符串是否包含任何非十进制数字字符。我使用CharacterSet.decimalDigits 并将其与用户输入相交。如果这个交集是空的,它可能意味着用户没有输入有效的输入。然而十字路口不是空的。
let digits = CharacterSet.decimalDigits
let letters = CharacterSet(charactersIn: "abcd") // never prints
let intersection = digits.intersection(letters)
for c in "abcd".characters {
if intersection.contains(UnicodeScalar(String(c))!) {
print("contains \(c)") // never prints
}
}
for i in 0...9 {
if intersection.contains(UnicodeScalar(String(i))!) {
print("contains \(i)")
}
}
print("intersection is empty: \(intersection.isEmpty)") // prints false
我什至尝试循环遍历所有 unicode 标量来测试成员资格,但这不会打印任何内容。
for i in 0x0000...0xFFFF {
guard let c = UnicodeScalar(i) else {
continue
}
if intersection.contains(c) {
print("contains \(c)")
}
}
为什么集合不为空?
注意使用let digits = CharacterSet(charactersIn: "1234567890") 可以按预期工作。我知道decimalDigits 包含的不仅仅是 0-9,但交集应该仍然是空的。
【问题讨论】:
-
bugs.swift.org 有几个关于字符集的错误报告。
-
很好.. 我只是枚举了
0x0000...0xFFFF以查看 .decimalDigits 中的其他字符,我不知道它超过了 0...9 -
@MathewS:如果您有兴趣:here 是一些(Objective-C 和)Swift 方法,用于从 CharacterSet 中获取所有字符。 “数字”有550个,如“꩓”(CHAM DIGIT THREE)、“໔”(LAO DIGIT FOUR)或“????” (数学双击数字一)
-
@MartinR 谢谢.. Cham 字母很漂亮!