由于swift中類和結構體都可以遵循協(xié)議,所以導致所有的協(xié)議必須實現(xiàn)
那么怎么實現(xiàn)OC中的可選協(xié)議呢搞疗?廢話不多說嗤朴,上代碼:
//前面添加 objc 關鍵字 表示這個協(xié)議是oc的協(xié)議 class關鍵之表示這個協(xié)議只能類才可以遵循
@objc protocol SomeDelegate:class {
//前面添加 objc optional 關鍵字 表示這個協(xié)議的實現(xiàn)是可選的
@objc optional func someFunc() -> Bool
}
上面的方法前加入optional
本質上是實現(xiàn)了swift的可選型特性
上面還說到 協(xié)議@objc protocol SomeDelegate:class
前面的 @objc
表示這個協(xié)議只能類才可以遵循
這樣在什么delegate
屬性時就可以用weak
關鍵字來修飾
像這樣:
weak var delegate:SomeDelegate?
如果不用@objc
來修飾協(xié)議娱仔,依然用weak
來修飾delegate
屬性編譯器就會給你報錯
'weak' must not be applied to non-class-bound 'XXXDelegate'; consider adding a protocol conformance that has a class bound
接下來是可選協(xié)議是否實現(xiàn)的判斷沐飘,
無返回值
//無參
delegate?.someFunc?() 這樣的可選型鏈就保證了就算代理沒有實現(xiàn)該代理方法也不會報錯
//有參
delegate?.someFunc?(someParam)
有返回值->可選型解包
if let value = delegate?.someFunc?() {
return value
}
基本上就是這樣,還有什么遺漏的看反饋再補充拟枚,哦了~