1. ホーム
  2. iphone

Objective-Cでプロトコル/デリゲートを拡張するには?

2023-09-16 20:55:35

質問

AVAudioPlayer のようなクラスを拡張したい場合、AVAudioPlayerDelegate に別のメソッドを追加する最良の方法は何でしょうか?

それのためのカテゴリを作るべきですか、私はそれを拡張しますか?

拡張する場合、実際のデリゲートゲッター/セッターを必ず上書きしなければならないのでしょうか? どのようにプロトコルを拡張すればいいのでしょうか?

以下は、私にエラーを与えます。

@protocol AudioTrackDelegate : AVAudioPlayerDelegate {
    - (void)foo;
}
@end

@interface AudioTrack : AVAudioPlayer {
}
@end

どのように解決するのですか?

他のプロトコルを実装したプロトコルを作成するための構文は以下の通りです。

@protocol NewProtocol <OldProtocol>
- (void)foo;
@end

の中のメソッドを呼び出したい場合 NewProtocol と型付けされたポインタに対して OldProtocol を呼び出すことができます。 respondsToSelector :

if ([object respondsToSelector:@selector(foo)])
    [(id)object foo];

あるいは、スタブメソッドをカテゴリとして NSObject :

@interface NSObject (NewProtocol)
- (void)foo;
@end
@implementation NSObject (NewProtocol)
- (void)foo
{
}
@end