有没有办法给出一个符合某个协议的类作为参数?
我最初尝试过的,带着一点希望,是:
-(NSString *) getKeyForMyProtocolClass(Class<MyProtocol>)aClass
但这会导致
[aClass superclass];
发出警告“发现Instance方法'超类'而不是类方法'超类'”。我对conformsToProtocol也有同样的警告:。
因为当参数是(Class)aClass时它没有给出这样的警告,所以它似乎是Class&lt; MyProtocol&GT;实际上并不是Class类型。
我不应该发送NSObject&lt; MyProtocol&gt;,因为我需要根据类及其超类确定正确的密钥,并且只有在没有设置该密钥的情况下才创建和添加新对象。
我可以使用conformsToProtocol查看,但是我必须返回一个非常糟糕的nil值。我宁愿在编译时停止这个问题。
简而言之,是否存在符合协议的类的类型声明?
答案 0 :(得分:1)
您可以对类对象进行类型转换以防止编译器警告。我能够做到以下几点:
- (void)tempMethod:(Class<NSObject>)klass {
id a = [(Class)klass superclass];
NSLog(@"%@", a);
}
因为你知道你传递的对象的类型(Class object
),所以应该可以正常工作。