位移OptionSet。。。

struct VerifiedOptions : OptionSet {

    let rawValue: Int

    static let facebook = VerifiedOptions(rawValue: 1 << 0)
    static let email = VerifiedOptions(rawValue: 1 << 1)
    static let phoneNumber = VerifiedOptions(rawValue: 1 << 2)

    static let count:Int = 3
}

像这样使用。。。
    let options:VerifiedOptions = [.facebook,.email,.phoneNumber]

    for i in 0..<VerifiedOptions.count {

        let option = VerifiedOptions(rawValue: options.rawValue << i)

        print("O:",option.rawValue,"T:",options.rawValue)

        if options.contains(option) { print("match") }
    }

打印解析为
O:7 T:7matchO:14 T:7O:28 T:7options
两个问题。。。。
为什么是7的倍数而不是1的倍数的位偏移?
为什么没有显示为包含所有3个选项?
谢谢你的时间。

最佳答案

抱歉,马上就抓住了

let option = VerifiedOptions(rawValue: options.rawValue << i)

应该是
let option = VerifiedOptions(rawValue: 1 << i)

打印输出是
O:1 T:7matchO:2 T:7matchO:4 T:7match
1+2+4=7=二进制111

关于swift - 位移位OptionSet是7的倍数吗? swift 3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44464132/

10-11 11:51