LoginSignup
2
2

More than 5 years have passed since last update.

在 Swift 中使用 Protocol

Posted at

主要紀錄一下從 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 name NSObjectProtocol.
 

optional

這裡講的 optional 不是 Swift 的 optional ,Swift 中 protocol 預設的行為,在 conforming 的 class 中就是都要一定要實作所有的 methods 。

如果真的要指定某個 method 是 optional 的話,宣告的前面就要掛上 @objc 才可以使用

@objc protocol MyProtocol {
    optional func optionalMethod()
}
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2