假如不久的将来出现一种智能钥匙,它可以适用于各种锁(当然是确认身份之后)。
一个三口之家:
- 小明
- 小明他妈
- 小明他爸
显然每个只需要这样一把钥匙就够了。家里有三种锁需要开(简单点啰)
- 车锁(爸爸妈妈能开)
- 门锁(三个人都能开)
- 保险柜锁(只有爸爸能开)
于是三个人需要三种不同的授权。
以前可能是这样的(当然为了好看点,也可以将几种 权限定义在结构体里或枚举里)
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!")
}
完全不用做位解析了。
网友评论