使用CharacterSet isSuperset时崩溃(EXC_BAD_ACCESS)

时间:2017-07-09 23:56:10

标签: swift nscharacterset

尝试使用CharacterSet确定输入字符串是否为有效的电话号码。似乎isSubset工作正常,但isSuperset会崩溃。

我认为这是基金会的一个错误。

let phoneNumberCharacterSet = CharacterSet(charactersIn: "01234567890,;*+#").union(CharacterSet.whitespaces)
let zeroCharacterSet = CharacterSet(charactersIn: "0")

if zeroCharacterSet.isSubset(of: phoneNumberCharacterSet) {
    print("zero is a subset of the phone number set")
}

if phoneNumberCharacterSet.isSuperset(of: zeroCharacterSet) {
    // will never get here due to crash
    print("is a superset of '0'")
}

1 个答案:

答案 0 :(得分:0)

根据this

  

似乎CharacterSet的当前桥接产生了一些奇怪的东西   这与isSuperset(of:)无效。 (它在内部打电话   CFCharacterSetIsSupersetOfSet(_:_:)。)

你可以

if phoneNumberCharacterSet.isSuperset(of: zeroCharacterSet) {
    // will never get here due to crash
    print("is a superset of '0'")
}

替换为

let zeroString = "0"
if zeroString.rangeOfCharacter(from: phoneNumberCharacterSet.inverted) == nil {
    print("is a superset of '0'")
}