美文网首页
关于OptionSetType的使用

关于OptionSetType的使用

作者: 无影灯 | 来源:发表于2015-12-04 00:12 被阅读61次

    假如不久的将来出现一种智能钥匙,它可以适用于各种锁(当然是确认身份之后)。

    一个三口之家:

    • 小明
    • 小明他妈
    • 小明他爸

    显然每个只需要这样一把钥匙就够了。家里有三种锁需要开(简单点啰)

    • 车锁(爸爸妈妈能开)
    • 门锁(三个人都能开)
    • 保险柜锁(只有爸爸能开)

    于是三个人需要三种不同的授权。
    以前可能是这样的(当然为了好看点,也可以将几种 权限定义在结构体里或枚举里)

    const int kDoorLock       = 1<<0
    const int kCarLock        = 1<<1
    const int kSafeboxLock    = 1<<2
    int xiaomingKeyFlags =  kDoorLock
    int mamaKeyFlags     = kCarLock | kDoorLock
    int babaKeyFlags     = kCarLock | kDoorLock | kSafeboxLock
    
    

    而现在在 swift 里有了更加优雅的做法,专治这种位掩码(可 bitwiseXXX)
    现在可能是这样的

    struct KeyFlags : OptionSetType {
      let rawValue: Int
        static let DoorLock   =  KeyFlags(rawValue: 1)
        static let CarLock   =  KeyFlags(rawValue: 2)
        static let SafeboxLock   =  KeyFlags(rawValue: 4)
    }
    
    let xiaomingKeyFlags =  [.DoorLock]
    let mamaKeyFlags = [.DoorLock, .CarLock]
    let babaKeyFlags = [.DoorLock, .CarLock, .SafeboxLock]
    
    

    定义看起来换汤不换药嘛,但是使用起来就爽多了

    if xiaomingKeyFlags.contains([.CarLock]){
      print("have permission to drive the car!")
    }
    

    完全不用做位解析了。

    相关文章

      网友评论

          本文标题:关于OptionSetType的使用

          本文链接:https://www.haomeiwen.com/subject/kbsshttx.html