Swift中的位枚举:
通过结构体遵守OptionSet协议来实现
struct AdaptScreenWidthType: OptionSet {
let rawValue: Int
static let AdaptScreenWidthTypeConstraint = AdaptScreenWidthType(rawValue: 0) //里面的数字是自己定义的,但不能随意定义
static let AdaptScreenWidthTypeFontSize = AdaptScreenWidthType(rawValue: 1<<1)
static let AdaptScreenWidthTypeCornerRadius = AdaptScreenWidthType(rawValue: 1<<2)
static let AdaptScreenWidthTypeAll = AdaptScreenWidthType(rawValue: 1<<3)
}
单例
class SDKSingleton {
private(set) var sdk:PaAccessControl?
private(set) var isDone:Bool?
static let shareInstance = SDKSingleton()
private init(){
sdk = PaAccessControl.init(paAccessControl: "ACEFaceKit", completion: { (code) in
if code == 0{
self.isDone = true
}else{
self.isDone = false
}
})
}
}
流程控制的if,在Swift不会对推断if i=0{},判断 为否了,而是通过guard else 来处理或者if let
class AGenerator: IteratorProtocol {
typealias Element = Int
var element:Int
init<T>(array:[T]){
self.element = array.count-1
}
func next() -> AGenerator.Element? {
let result:Element? = self.element < 0 ? nil : element
element -= 1
return result
}
let arr = ["ha","xi","1","呵呵"]
let intera = AGenerator.init(array: arr)
while let i = intera.next() {
print("\(String(describing: i))-----\(arr[i])")
}
注意
一开始我是这么定义的
func next() -> AGenerator.Element? {
let result:Element = self.element < 0 ? 0 : element
element -= 1
return result
}
在使用的时候while循环不会跳出了,因为Swift 不会对xxx=0作false的条件推断,所以不能跳出循环,当时我就想那这种数字的case怎么处理,那就是把变量转化为可选类型,这样不管什么类型都可以赋值nil,否则是不行的,Swift是强类型语言,会做类型校验,如果你给Int 赋值nil 编译过不了,提示类型不匹配,得出结论,guard 守护和if let 分支条件都是都可选类型的一种处理,突然觉得这个可选类型碉堡了,作为一个菜鸟
网友评论