在Swift 3中写这个的正确方法是什么?
let ld = NSDataDetector(types: NSTextCheckingResult.CheckingType.address | NSTextCheckingResult.CheckingType.phoneNumber)
这就是我得到的:
二元运算符|不能应用于两个NSTextCheckingResult.CheckingType操作数。
我知道他们都是UInt64
,但我不知道如何将它们合并。
答案 0 :(得分:1)
试试这个
do {
let ld = try NSDataDetector(types: NSTextCheckingResult.CheckingType.address.rawValue | NSTextCheckingResult.CheckingType.phoneNumber.rawValue )
}
catch {
}
答案 1 :(得分:0)
使用这些常量的原始值,因为类型CheckingType
不是int变体:
NSDataDetector(types: NSTextCheckingResult.CheckingType.address.rawValue | NSTextCheckingResult.CheckingType.phoneNumber.rawValue)
答案 2 :(得分:0)
地址.CheckingType.address是一个枚举案例,而不是UInt64。原始值是UInt64,因此您可以使用这样的原始值
do{
let ld = try NSDataDetector(types: NSTextCheckingResult.CheckingType.address.rawValue | NSTextCheckingResult.CheckingType.phoneNumber.rawValue)
}catch{
print("error")
}
答案 3 :(得分:0)
我个人采用功能方法,使用CheckingType
值数组。这将减少代码重复,并且可以轻松地向扫描程序添加新的检查类型:
let detectorTypes = [
NSTextCheckingResult.CheckingType.address,
NSTextCheckingResult.CheckingType.phoneNumber
].reduce(0) { $0 | $1.rawValue }
let detector = try? NSDataDetector(types: detectorTypes)
或者,为了进一步减少值前缀中的重复:
let types: [NSTextCheckingResult.CheckingType] = [.address, .phoneNumber]
let detector = try? NSDataDetector(types: types.reduce(0) { $0 | $1.rawValue })