Classオブジェクトを特定のプロトコルにキャストしようとしています。このプロトコルは、そのクラスが実装するクラスメソッド(+)を定義します。
この質問で概説されているように、(id <protocol>)を使用してこれを行う方法は知っていますが、Classオブジェクトの正しい方法を理解できないようです。
基本的なシナリオは次のとおりです。
私はプロトコルを持っています:
@protocol Protocol <NSObject>
+ (id)classMethod:(id)arg;
@end
次に、Classオブジェクトを受け入れる関数があります。これは、別の引数に基づいてプロトコルに準拠することがあることを知っています(これは明らかに非常に単純化されています)。
- (id)someMethodWithClass:(Class)cls andUseArg:(BOOL)arg
{
id instance;
if (arg != nil) {
instance = [(Class<Protocol>)cls classMethod:arg];
}
}
今、私はこれについて何の警告も受けていません、そしてそれは私には正しいように見えます。(arg!= nilの場合、クラスが準拠していることを保証できるため、どのような場合でもエラーは発生しません。)
ただし、Xcodeでオートコンプリートが取得されていないため、これが正しい方法かどうか疑問に思います。何かご意見は?(私はインスタンスがid <プロトコル>であることに興味がないことに注意してください。)