Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C对实现协议的类的引用_Objective C - Fatal编程技术网

Objective c 目标C对实现协议的类的引用

Objective c 目标C对实现协议的类的引用,objective-c,Objective C,如何引用实现特定协议的类(不是它的实例!) +(id<Data>) dataForName:(NSString *)name { id<DataManager> manager = SpecializedDataManager; // <-- which datatype does "manager" have to be? return [[manager sharedManager] get:name]; //Getting data over

如何引用实现特定协议的类(不是它的实例!)

+(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
}
+(id)dataForName:(NSString*)名称{

id manager=SpecializedDataManager;//我自己没有尝试过,但是您应该能够使用指向类的指针,尽管我怀疑您是否可以指定该类必须实现某个协议:

static Class manager = NULL;

+ (void)someInitMethod
{
    manager = [SpecializedDataManager class];
    NSAssert([manager conformsToProtocol:@protocol(DataManager)], @"Achtung!"); 
}

如果我理解你的意思,你想写这样的东西:

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

if ([someObject isKindOfClass:[AnotherObjectConformingThisProtocol class]]) {}
if (class == [AnotherObjectConformingSomeProtocol class]) {}
+(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
}
id someObject=另一个符合该协议的对象;
Class Class=[(NSObject*)SomeObject Class];
如果([someObject isKindOfClass:[AnotherObjectConformingThisProtocol class]]){}
如果(类==[AnotherObjectConformingSomeProtocol类]{}
如果没有-请澄清你的确切意思

更新:我在另一篇帖子附近读到了你的评论,得到了:

为DataManager和数据协议创建包装类:

@interface DataClass : NSObject <Data>
@end

@interface DataManagerClass : NSObject <DataManager>
@end
@接口数据类:NSObject
@结束
@接口数据管理器类:NSObject
@结束
并使用如下代码:

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

if ([someObject isKindOfClass:[AnotherObjectConformingThisProtocol class]]) {}
if (class == [AnotherObjectConformingSomeProtocol class]) {}
+(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
}
+(DataClass*)dataForName:(NSString*)名称{

DataManagerClass*manager=SpecializedDataManager;//这就是您要寻找的:

+(id<Data>) dataForName:(NSString *)name {
    Class<DataManager> manager = [SpecializedDataManager class];
    return [[manager sharedManager] get:name];
}
+(id)dataForName:(NSString*)名称{
类管理器=[SpecializedDataManager类];
return[[manager sharedManager]get:name];
}

我的第一篇文章中显示的代码被简化,以一种不太复杂的方式显示问题。事实上,“manager”变量在我的代码中的许多地方都被使用。因此我必须找到一种方法来一次性指定类,而不是将其用作占位符。