Swift3:组合两个uint64类型选项

时间:2016-11-29 10:58:20

标签: ios swift swift3

在Swift 3中写这个的正确方法是什么?

let ld = NSDataDetector(types: NSTextCheckingResult.CheckingType.address | NSTextCheckingResult.CheckingType.phoneNumber)

这就是我得到的:

  

二元运算符|不能应用于两个NSTextCheckingResult.CheckingType操作数。

我知道他们都是UInt64,但我不知道如何将它们合并。

4 个答案:

答案 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)

NSTextCheckingResult中的

地址.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 })