由于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
}
基本上就是这样,还有什么遗漏的看反馈再补充,哦了~
网友评论