0

特定のプロトコルを実装するクラス (インスタンスではない!) を参照する方法は?

+(id<Data>) dataForName:(NSString *)name {
    id<DataManager> manager = SpecializedDataManager; // <-- which datatype does "manager" have to be?
    return [[manager sharedManager] get:name]; //Getting data over a singleton of manager
}

DataDataMangerはプロトコルで、 はプロトコルを実装SpecializedDataManagerするクラスDataManagerです。

4

3 に答える 3

0

私はこれを自分で試したことはありませんが、クラスへのポインタを使用できるはずですが、クラスが特定のプロトコルを実装する必要があることを指定できるとは思えません。

static Class manager = NULL;

+ (void)someInitMethod
{
    manager = [SpecializedDataManager class];
    NSAssert([manager conformsToProtocol:@protocol(DataManager)], @"Achtung!"); 
}
于 2012-06-01T12:37:35.467 に答える
0

あなたが正しいと理解したら、次のように書きたいと思います:

id<SomeProtocol> someObject = AnotherObjectConformingThisProtocol;    
Class class = [(NSObject*)SomeObject class];

if ([someObject isKindOfClass:[AnotherObjectConformingThisProtocol class]]) {}
if (class == [AnotherObjectConformingSomeProtocol class]) {}

いいえの場合 - 正確に何を意味するのかを明確にしてください。

更新:別の投稿の近くであなたのコメントを読んで、それを手に入れました:

DataManager および Data プロトコルのラッパー クラスを作成します。

@interface DataClass : NSObject <Data>
@end

@interface DataManagerClass : NSObject <DataManager>
@end

次のようなコードを使用します。

+(DataClass*) dataForName:(NSString *)name {
    DataManagerClass* manager = SpecializedDataManager; // <-- which datatype does "manager" have to be?
    return [[manager sharedManager] get:name]; //Getting data over a singleton of manager
}
于 2012-06-01T12:49:46.230 に答える
0

これはあなたが探しているものですか:

+(id<Data>) dataForName:(NSString *)name {
    Class<DataManager> manager = [SpecializedDataManager class];
    return [[manager sharedManager] get:name];
}
于 2012-07-18T20:47:43.987 に答える