2017-06-09 43 views
1

位移位OptionSet ...移位OptionSet是7的倍數?斯威夫特3

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:7

兩個問題... 。

  1. 爲什麼位移的倍數是7而不是1的倍數?
  2. 爲什麼不是options顯示內部有3個選項?

謝謝你的時間。

+0

你應該使用'for我在options.indication {...' – Alexander

+0

有趣的,我會研究。謝謝 – Magoo

回答

1

對不起,馬上

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