Protocol 的使用在 Swift 的世界里變得簡單而復(fù)雜
定義一個 protocol 是這樣的
protocol XXX {
func hello()
}
使用一個 Protocol 創(chuàng)建一個類是這樣的
class XXXObject: XXX {
func hello() { }
}
但是撤师,如果你需要在一個 delegate 屬性中聲明它屬于哪一個 Protocol, 是不行的季研,必須指定一個類作為類型。
class YYY {
weak var delegate: XXX? // 編譯器報錯逆屡,不能這樣定義
}
所有的 Protocol 類都繼承 XXXObject 就可以了
class YYY {
weak var delegate: XXXObject? // 換成這樣就好了
}
但我仍然覺得是一個坑圾旨,一個類理論上應(yīng)該可以遵叢多個協(xié)議,所以魏蔗,一旦離開了 NSObject砍的, 這也就變成一個坑。
回到 NSObject 的世界莺治,Protocol的可讀性就變得高起來了
protocol XXX: NSObjectProtocol {
func hello()
}
class XXXObject: NSObject, XXX {
func hello() { }
}
class YYY {
weak var delegate: XXX?
}
同時 Protocol 也可以支持 Optional call 了
@objc protocol XXX: NSObjectProtocol {
optional
func hello()
}
class XXXObject: NSObject, XXX {
func hello() { }
}
class YYY {
weak var delegate: XXX?
func call() {
if let helloFunc = delegate?.hello {
helloFunc()
}
}
}