Objective-C Language
プロトコル
サーチ…
基本的なプロトコル定義
新しいプロトコルを定義する:
@protocol NewProtocol
- (void)protocolMethod:(id)argument;
- (id)anotherMethod;
@end
オプションおよび必須メソッド
デフォルトでは、プロトコルで宣言されたすべてのメソッドが必要です。つまり、このプロトコルに準拠するクラスであれば、それらのメソッドを実装する必要があります。
オプションのメソッドを宣言することもできます。これらのメソッドは、必要な場合にのみ実装できます。
@optional
ディレクティブで任意のメソッドをマークします。
@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
@end
この場合、 anotherMethod
だけがオプションとしてマークされます。 @optional
ディレクティブのないメソッドは@optional
とみなされます。
@optional
ディレクティブは、プロトコル定義の終わりまで、または別のディレクティブが見つかるまで、続くメソッドに適用されます。
@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
- (void)andAnotherMethod:(id)argument;
@required
- (void)lastProtocolMethod;
@end
この最後の例は、2つのオプションのメソッドと2つの必要なメソッドを持つプロトコルを定義しています。
プロトコルに準拠
次の構文は、クラスが山括弧を使用してプロトコルを採用することを示しています。
@interface NewClass : NSObject <NewProtocol>
...
@end
つまり、NewClassのインスタンスは、そのインタフェースで宣言されたメソッドに応答するだけでなく、 NewProtocol
すべての必須メソッドの実装を提供します。
クラスがカンマで区切って、複数のプロトコルに準拠することも可能です。
@interface NewClass : NSObject <NewProtocol, AnotherProtocol, MyProtocol>
...
@end
単一のプロトコルに準拠する場合と同様に、クラスは各プロトコルの必要なメソッドと、実装するために選択したオプションのメソッドをそれぞれ実装する必要があります。
フォワード宣言
メソッドなしでプロトコル名を宣言することは可能です:
@protocol Person;
あなたのコード(クラス定義など)を使用してください:
@interface World : NSObject
@property (strong, nonatomic) NSArray<id<some>> *employees;
@end
後でコードのどこかにプロトコルのメソッドを定義します:
@protocol Person
- (NSString *)gender;
- (NSString *)name;
@end
プロトコル定義を使用してそのファイルをインポートするまで、プロトコルの詳細を知る必要がない場合に便利です。したがって、クラスヘッダーファイルはクリアなままで、クラスの詳細のみが含まれています。
オプションのメソッド実装の有無の確認
if ([object respondsToSelector:@selector(someOptionalMethodInProtocol:)])
{
[object someOptionalMethodInProtocol:argument];
}
チェック準拠プロトコル
クラスがプロトコルに準拠しているかどうかを示すブール値を返します。
[MyClass conformsToProtocol:@protocol(MyProtocol)
];