[Swift2.0~3.0系列]OptionSetType使用(更新至3.0)
1.Option set介绍
swift1.2
设置Option set
只需要遵循RawOptionsetType
协议即可。早前是这么声明选项集的:
struct Inventory:RawOptionSetType {
var rawValue:UInt = 0
init(rawValue:UInt){self.rawValue = https://www.it610.com/article/rawValue}
init(nilLiteral:()){rawValue = 0}
func toRaw()->UInt{return rawValue}
var boolValue:Bool{return rawValue != 0}static func fromRaw(raw:UInt)->Inventory?{return self(rawValue: raw)}
static func fromMask(raw:UInt)->Inventory{return self(rawValue: raw)}
static var allItems:Inventory{return self(rawValue: 0)}
static func convertFromNilLiteral()->Inventory{self(nilLiteral: ())}
static var allZeros:Inventory{return self(rawValue: 0)}static var Sword:Inventory{return self(rawValue: 1<<1)}
static var Helmet:Inventory{return self(rawValue: 1<<2)}
static var Shield:Inventory{return self(rawValue: 1<<3)}
}var inventory:Inventory = .Sword | .Shield
if inventory & .Shield != nil{
println("has shield")
}
卧槽这不是就是或运算吗,确实,经常在设置
options
时用得比较频繁,而现在的RawOptionsetType
协议已经不复存在,取而代之的是OptionSetType
,因此可能语法声明和使用上稍有不同,重拾难度。上文代码使用swift2.0改写后是这样的:struct Inventory:OptionSetType {
let rawValue:Intstatic let Sword = Inventory(rawValue: 1)
static let Helmet = Inventory(rawValue: 1<<1)
static let Shield = Inventory(rawValue: 1<<2)
}var inventory:Inventory = [.Sword,.Shield]
if inventory.contains(inventory){
print("has shield")
}
代码清爽,且提供了许多优秀的方法,比如
contains,remove
等对集合的操作。2.实战运用
2.1设置可视化约束时代码改写
swift1.2
前,我们经常习惯将options设为nil,但swift2.0
中开始报错,修改方法如下//swift1.2语法
let c1 = NSLayoutConstraint.constraintsWithVisualFormat("H:|-(20)-[v(100)]",
options: nil, metrics: nil, views: ["v":v1]) as [NSLayoutConstraint]
//swift2.0语法
let c1 = NSLayoutConstraint.constraintsWithVisualFormat("H:|-(20)-[v(100)]",
options: [], metrics: nil, views: ["v":v1]) as [NSLayoutConstraint]
2.2设置视图的autoresizingMask
swift1.2
前,我们习惯使用|
来对两个选项进行或运算,如下v1.autoresizingMask = .FlexibleTopMargin | .FlexibleLeftMargin
【[Swift2.0~3.0系列]OptionSetType使用(更新至3.0)】而swift2.0使用optionSetType之后,声明方式是使用
[]
中添加的方式。v1.autoresizingMask = [.FlexibleTopMargin,.FlexibleLeftMargin]
3 swift3.0中的用法 请见swiftgg Swift 中的选项集合 一文
推荐阅读
- 【欢喜是你·三宅系列①】⑶
- 情节33.0
- 你不可不知的真相系列之科学
- 人脸识别|【人脸识别系列】| 实现自动化妆
- 2018-06-13金句系列7(金句结构-改编古现代诗词)
- Unity和Android通信系列文章2——扩展UnityPlayerActivity
- 乡野村趣系列之烧仙草
- Java内存泄漏分析系列之二(jstack生成的Thread|Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析)
- 15、IDEA学习系列之其他设置(生成javadoc、缓存和索引的清理等)
- 【年终激励系列】之五(年终奖如何与考核紧密相连)