如何将符合协议的类声明为参数类型?
Posted
技术标签:
【中文标题】如何将符合协议的类声明为参数类型?【英文标题】:How to declare a class that conforms to a protocol as parameter type? 【发布时间】:2011-10-26 12:55:42 【问题描述】:有没有办法给一个符合特定协议的类作为参数?
起初我怀着一点希望尝试的是这样的:
-(NSString *) getKeyForMyProtocolClass(Class<MyProtocol>)aClass
但这会导致
[aClass superclass];
给出警告“找到实例方法'超类'而不是类方法'超类'”。我收到了同样的 conformsToProtocol 警告:。
因为当参数是 (Class)aClass 时它没有给出这样的警告,看来 Class
我不应该发送 NSObject
我可以使用 conformsToProtocol 进行检查,但是我必须返回一个零值,这只是乱七八糟的。我宁愿在编译时停止这个问题。
那么简而言之,是否存在符合协议的类的类型声明?
【问题讨论】:
我有一个类可以接收改变其行为的扩展。它将其扩展存储在字典中,键取决于类。它不知道哪些类可以扩展它。关键是实现协议的最顶层超类,这样一个类和它的超类就不会做同样的事情,所以其他类也可以询问它是否有某个扩展,而不必知道该扩展类的所有子类.我已经准备好了,除了方法签名,如果给定的类没有实现协议,它现在强制我返回 nil。 注意:我好久没用Objective-C了。我不再寻找这个问题的答案,也没有资格判断和接受任何答案。我认为这个问题目前属于社区投票。 【参考方案1】:您可以只对您的类对象进行类型转换以防止编译器警告。我能够做到以下几点:
- (void)tempMethod:(Class<NSObject>)klass
id a = [(Class)klass superclass];
NSLog(@"%@", a);
既然你知道你传递的对象的类型(Class object
),这应该可以正常工作。
【讨论】:
以上是关于如何将符合协议的类声明为参数类型?的主要内容,如果未能解决你的问题,请参考以下文章