2017-06-09 2 views
1

Bit déplacé OptionSet ...Décalage de bits OptionSet est multiple de 7? Swift 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 
} 

utilisé comme si ...

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") } 
    } 

Prints Décident

O:7 T:7matchO:14 T:7O:28 T:7

Deux questions ...

  1. Pourquoi le décalage de bits est-il un multiple de 7 et non un multiple de 1?
  2. Pourquoi options ne montre-t-il pas les 3 options à l'intérieur?

Merci pour votre temps.

+0

Vous devriez utiliser 'for i in options.indicies {...' – Alexander

+0

Intéressant, je vais examiner cela. Merci – Magoo

Répondre

1

Désolé, pris immédiatement

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

Devrait être

let option = VerifiedOptions(rawValue: 1 << i) 

Imprimez est

O:1 T:7matchO:2 T:7matchO:4 T:7match

1 + 2 + 4 = 7 = binaire 111