1、构建选项集合类型
要求:
1、一个类型为整型的原始值(rawValue)
2、一个初始化构造器。
对于结构体来说,Swift 通常都会自动提供一个逐一成员构造器(memberwise initializer),所以你并不需要自己写一个。rawValue 是位域底层的存储单元。每个选项都应该是静态的常量,并使用适当的值初始化了其位域。
如:
struct Sports: OptionSet {
let rawValue: Int
static let running = Sports(rawValue: 1) //里面的数字是自己定义的,但不能随意定义
static let cycling = Sports(rawValue: 2)
static let swimming = Sports(rawValue: 4)
static let fencing = Sports(rawValue: 8)
static let shooting = Sports(rawValue: 32)
static let horseJumping = Sports(rawValue: 512)
}
2、使用:
//使用
func test() {
let triathlon: Sports = [.swimming,.fencing]
if triathlon.contains(.shooting) {
print("包含shooting")
} else {
print("no包含shooting")
}
if triathlon.contains(.swimming) {
print("包含")
}
}
️注意:编译器并没有自动把 2 的整数次幂按照升序赋给你的选项——这些工作应该由你来做,你需要正确地赋值,使得每个选项代表 rawValue 中的其中一个位。如果你给选项赋予了连续的整数(1,2,3,…),就会导致无法分辨出 .swimming(值为 3)和 [.running, .cycling](值为 1 + 2)。
说明:遵从 OptionSet 并不意味着遵从 Sequence 和 Collection 协议,所以你无法使用 count 来确定集合中有几个元素,也无法使用 for 循环来遍历选择的选项。从根本上说,一个选项集合仅仅是简单的整数值。
(如有错误欢迎斧正)
参考:http://swift.gg/2016/10/25/swift-option-sets/
作者:悃破
链接:https://www.jianshu.com/p/8e9dc62beb66
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论