如何将符合协议的类声明为参数类型?

时间:2011-10-26 12:55:42

标签: objective-c class

有没有办法给出一个符合某个协议的类作为参数?

我最初尝试过的,带着一点希望,是:

-(NSString *) getKeyForMyProtocolClass(Class<MyProtocol>)aClass

但这会导致

[aClass superclass];

发出警告“发现Instance方法'超类'而不是类方法'超类'”。我对conformsToProtocol也有同样的警告:。

因为当参数是(Class)aClass时它没有给出这样的警告,所以它似乎是Class&lt; MyProtocol&GT;实际上并不是Class类型。

我不应该发送NSObject&lt; MyProtocol&gt;,因为我需要根据类及其超类确定正确的密钥,并且只有在没有设置该密钥的情况下才创建和添加新对象。

我可以使用conformsToProtocol查看,但是我必须返回一个非常糟糕的nil值。我宁愿在编译时停止这个问题。

简而言之,是否存在符合协议的类的类型声明?

1 个答案:

答案 0 :(得分:1)

您可以对类对象进行类型转换以防止编译器警告。我能够做到以下几点:

- (void)tempMethod:(Class<NSObject>)klass {
   id a = [(Class)klass superclass];
    NSLog(@"%@", a);
}

因为你知道你传递的对象的类型(Class object),所以应该可以正常工作。