美文网首页
Swift 学习(-)

Swift 学习(-)

作者: 不辣先生 | 来源:发表于2019-06-18 11:22 被阅读0次

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 分支条件都是都可选类型的一种处理,突然觉得这个可选类型碉堡了,作为一个菜鸟

相关文章

网友评论

      本文标题:Swift 学习(-)

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