美文网首页
关于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的使用

    假如不久的将来出现一种智能钥匙,它可以适用于各种锁(当然是确认身份之后)。 一个三口之家: 小明 小明他妈 小明他...

  • Swift - OptionSetType

    引言 先来看看一个UIView动画在Objective-C和Swift里面分别是怎么写的。 我们可以发现,在Obj...

  • [Swift2.0~3.0系列]OptionSetType使用(

    1.Option set介绍 swift1.2 设置Option set只需要遵循RawOptionsetType...

  • RenderBufferLoadAction的使用方式

    1)RenderBufferLoadAction的使用方式2)关于Mipmaps与Quality使用的疑问3)关于...

  • 关于WebView的使用-基本使用

    WebView问题系列: 1. 遇到的问题-基本使用 2.遇到的问题- All WebView methods m...

  • 关于FeignClient的使用大全——进阶篇

    关于FeignClient的基本使用,我在上一篇文章关于FeignClient的使用大全——使用篇已经介绍过了,大...

  • 关于农药的使用

    万老师是农药研究专家,最近才去日本考察农药研发与使用情况。我国目前使用的农药成份均来自日本与欧美,农作务生产过程中...

  • 关于rebase的使用

    git rebase git rebase 的使用意义是,将当前分支上发生的事情,以指定的分支为参考基础,重现一遍...

  • 关于电脑的使用

    1.必须要跨越过去的墙被墙了好多网站,但是我只要谷歌和维基,谷歌比百度强太多了,维基和百度百科各有补充

  • 关于volley的使用

    https://blog.csdn.net/qwm8777411/article/details/45770979

网友评论

      本文标题:关于OptionSetType的使用

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