#はじめに
mapにピンを立てる際に、カスタムなアノテーションを用意してMKAnnotationを継承させたときに、「Cannot declare conformance to 'NSObjectProtocol' in Swift」
とエラーが出ました。
final class CustomAnnotation: MKAnnotation {}
#環境
[Swift] Version 5.3.2
[iOS] Version 14.4
#エラーへの対応
「Cannot declare conformance to 'NSObjectProtocol' in Swift」
そのままですが、Swiftでは、私たちがNSObjectProtocol
の継承を直接宣言できないらしいです。
NSObjectProtocol
は、すべてのObjective-Cオブジェクトの基本となるメソッドのグループです。
The group of methods that are fundamental to all Objective-C objects.
(https://developer.apple.com/documentation/objectivec/nsobjectprotocol)
CocoaのルートクラスであるNSObject
は、このNSObjectProtocolを継承しているので全てのメソッドを使用できます。
open class NSObject : NSObjectProtocol
なので、対応としてはNSObjectを継承
すれば大丈夫です。
MKAnnotationがNSObjectを継承したオブジェクトと思い込んでいたのですが、「Jump to Definition」すると実際はNSObjectProtocolに準拠したプロトコルでした。
public protocol MKAnnotation : NSObjectProtocol
#最後に
思い込みで少しつまづきましたが、まずは素直に「Jump to Definition」、「公式ドキュメントを読む」、「エラーをよく読む」というのが大事ですね。。
#参考文献
この記事は、以下の情報を参考にしました。