Swift 4.0及以上协议写法 option 可选协议实现

96
lwhldy
0.1 2019.02.27 14:45 字数 241

由于swift中类和结构体都可以遵循协议,所以导致所有的协议必须实现

那么怎么实现OC中的可选协议呢?废话不多说,上代码:
//前面添加 objc 关键字 表示这个协议是oc的协议 class关键之表示这个协议只能类才可以遵循
@objc protocol SomeDelegate:class {
        //前面添加 objc optional 关键字 表示这个协议的实现是可选的
        @objc optional func someFunc() -> Bool
}

上面的方法前加入optional 本质上是实现了swift的可选型特性
上面还说到 协议@objc protocol SomeDelegate:class 前面的 @objc表示这个协议只能类才可以遵循
这样在什么delegate属性时就可以用weak关键字来修饰

像这样:

weak var delegate:SomeDelegate?

如果不用@objc来修饰协议,依然用weak来修饰delegate属性编译器就会给你报错

'weak' must not be applied to non-class-bound 'XXXDelegate'; consider adding a protocol conformance that has a class bound

接下来是可选协议是否实现的判断,

无返回值

//无参
delegate?.someFunc?() 这样的可选型链就保证了就算代理没有实现该代理方法也不会报错
//有参
delegate?.someFunc?(someParam)

有返回值->可选型解包

if let value = delegate?.someFunc?() {
            return value
}

基本上就是这样,还有什么遗漏的看反馈再补充,哦了~

日记本
Web note ad 1