主要紀錄一下從 Objective-C 中的使用習慣出發,轉換到 Swift 裡面該怎麼作,不含有 Swift 中才有的行為。
宣告
最簡易的宣告
protocol MyProtocol {
/// ...
}
繼承 NSObjectProtocol
和 Objective-C 中不一樣,要繼承 NSObjectProtocol
,而非 <NSObject>
,在被當成 delegate 的時候,才有辦法使用 respondsToSelector(_:)
來檢查使用的 class 有沒有實作指定的 method 。
protocol MyProtocol: NSObjectProtocol {
/// ...
}
用了 NSObject
的話
如果繼承了 NSObject
的話, Xcode 則是會抱怨 MyProtocol 不是一個 class ,不能繼承身為 class 的 NSObject
:
在官方文件中也有提到:
Note
This protocol is imported into Swift with the nameNSObjectProtocol
.
optional
這裡講的 optional 不是 Swift 的 optional ,Swift 中 protocol 預設的行為,在 conforming 的 class 中就是都要一定要實作所有的 methods 。
如果真的要指定某個 method 是 optional 的話,宣告的前面就要掛上 @objc
才可以使用
@objc protocol MyProtocol {
optional func optionalMethod()
}