1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cannot declare conformance to 'NSObjectProtocol' in Swiftへの対応

Posted at

#はじめに
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」、「公式ドキュメントを読む」、「エラーをよく読む」というのが大事ですね。。

#参考文献
この記事は、以下の情報を参考にしました。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?