再利用可能なコードの単純なセットを開発しています。メソッドのセットをグループ化し、実行時にユーザーにデータを要求するプロトコルを作成しました。
デリゲートの設定は必須だと思います。理由を示すアサートをスローして、実行時に開発者にデリゲートを設定させることはできますか?
アサートを使用してクラスのユーザーを強制することは良い方法ですか? 設計レベルの欠陥はありますか?
再利用可能なコードの単純なセットを開発しています。メソッドのセットをグループ化し、実行時にユーザーにデータを要求するプロトコルを作成しました。
デリゲートの設定は必須だと思います。理由を示すアサートをスローして、実行時に開発者にデリゲートを設定させることはできますか?
アサートを使用してクラスのユーザーを強制することは良い方法ですか? 設計レベルの欠陥はありますか?
最初の「グッドプラクティス」の質問:
そうでない場合は、メソッドをオプションにしないでください。
批判的なものではなく、より多くの意見です
initWithDelegate:
デリゲートが必要な場合はメソッドを提供するinit
方法で、より早く気づきます。@required
プロトコルにインジケーターを追加するだけで、コンパイル時に警告を発生させることができます。
@protocol SuperAwesomeProtocol <NSObject>
@required
-(void) requiredMethod1;
-(void) requiredMethod2;
@optional
-(void) optionalMethod1;
-(void) optionalMethod2;
@end
//and making your delegate specific:
@property (nonatomic, assign) id<SuperAwesomeProtocol> delegate;
以下を使用して、ランタイム アサートを引き続き発生させることができます。
if (!delegate || ![delegate respondsToSelector:@selector(requiredMethod1)])
{
//Assertion failure
}
はい、アプリケーションでプロトコルを使用することをお勧めします。
プロトコルは、任意のクラスで実装できるメソッドを宣言します。
以下はプロトコルの使用が良い状況です。