カテゴリはObjective Cでプロトコルを実装できますか?


88

NSDateにカテゴリがあり、以前に作成したプロトコルを実装できると便利です。これは可能ですか?これの正しい構文は何ですか?

回答:


144

はい、可能です。構文は次のとおりです。

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

このトピックに関するAppleのドキュメントは次のとおりです。

クラス拡張を使用してこれを行うことも可能です。私は、デリゲートプロトコルに個人的に準拠することが非常に好きです。そうすることで、パブリックインターフェイスから一部のクラスの一部のデリゲートであるという実装の詳細を隠し、ヘッダーから依存関係を削除します。


プロトコル宣言をクラスカテゴリの実装に移動する方法がないのは残念です。
adib 2012年

@adibそれがクラス拡張の目的です。
Nikolai Ruhe

@ bikram990ドキュメントは廃止され、現在はレガシーセクションにあります。リンクを更新しました。
Nikolai Ruhe 14年

残念ながら、デリゲートプロトコルの実装に必要になる可能性があるため、インスタンス変数をカテゴリで宣言することはできません
yasirmturk

@yasirmturk objc_setAssociatedObjectを使用してそれを行うことができます:)
animaonline
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.