学习如何使用 Swift 中的 OptionSet

Swift 中的 OptionSet 允许你定义一组关于配置的选项,每个选项只会占用一个比特位。从作用上来看,它等同于 Objective-C 中的 NS_OPTIONS。

从形式上来看,OptionSet 跟枚举很相似。但它们使用场景是不同的。

对于枚举,通常我们只会使用其单一的某个值。比如下面的关于等级的枚举:

enum Level {
    case high
    case medium
    case low
}

当我们使用的时候,通常只会用到某一个 case,不会存在某个条件既 high 又 low 的情况。

而对于 OptionSet ,通常都是使用多个值来进行配置的。比如 WritingOptions 的使用:

data = try JSONSerialization.data(withJSONObject: messageWrapper, options: [.prettyPrinted, .sortedKeys])

OptionSet 是什么

OptionSet 是 Swift 标准库的一个协议。它代表的是比特集的类型,每一位比特代表了一个选项。

如果自定义类型遵守了该协议,则该类型可以执行与集合相关的操作,比如网络配置项、本地缓存配置项等等。更重要的是,当使用特定标准实现时,遵守该协议并不需要你写额外的代码。

如何使用

当创建选项集的时候,首先,自定义类型必须包含一个名字为 rawValue 的属性,且该类型必须遵守了 FixedWidthInteger 协议,比如 Int 或者 UInt8 。

然后,再去创建静态属性的每个配置项,且每个配置项需唯一。每个配置项的原始值依次为 1/2/4/16等等。

原始值解释:

  • 1 << 0 代表不移动,2 的零次方为 1
  • 1 << 1 代表挪动一位,2 的 1 次方为 2
  • 以此类推

下面是一个缓存库的配置项示例代码:

struct CacheOptions: OptionSet {
    let rawValue: Int
    
    static let memory = CacheOptions(rawValue: 1 << 0)
    static let disk = CacheOptions(rawValue: 1 << 1)
    static let autoClear = CacheOptions(rawValue: 1 << 2)
}

下面是使用的三种方式:

  • 赋值空选项:let noOptions: CacheOptions = []
  • 赋值单个选项:let singleOption: CacheOptions = .memory
  • 赋值多个选项:let multipleOptions: CacheOptions = [.memory, .autoClear]

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYlxS6Bl' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片