假如不久的將來出現(xiàn)一種智能鑰匙言缤,它可以適用于各種鎖(當(dāng)然是確認(rèn)身份之后)锯七。
一個(gè)三口之家:
- 小明
- 小明他媽
- 小明他爸
顯然每個(gè)只需要這樣一把鑰匙就夠了访敌。家里有三種鎖需要開(簡單點(diǎn)啰)
- 車鎖(爸爸媽媽能開)
- 門鎖(三個(gè)人都能開)
- 保險(xiǎn)柜鎖(只有爸爸能開)
于是三個(gè)人需要三種不同的授權(quán)腊嗡。
以前可能是這樣的(當(dāng)然為了好看點(diǎn)舷手,也可以將幾種 權(quán)限定義在結(jié)構(gòu)體里或枚舉里)
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
而現(xiàn)在在 swift 里有了更加優(yōu)雅的做法拧簸,專治這種位掩碼(可 bitwiseXXX)
現(xiàn)在可能是這樣的
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!")
}
完全不用做位解析了聚霜。