在我的应用程序中,我需要将“Class”作为返回类型返回,如:
Application.m:
+ (Class)getParserClass {
return [NCCurrencyParser class];
}
NCCurrencyParser.m:
@interface NCCurrencyParser NSObject <NCParser>
@protocol NCParser
+(NSNumber *)parserNumber:(NSNumber *)number;
调用方法中的:
Class parserClass = [Application getParserClass];
[parserClass parserNumber:1.0];
但是编译器给了我一个错误,即parserClass可能不响应parseNumber。如何强制类必须采用某些协议,如:Class <NCParser>
(但它不起作用)
答案 0 :(得分:3)
类对象是第一类对象,可以像任何其他Objective-C对象一样实现协议(id,NSObject *,...)
所以,只要做任何其他对象协议通常做的事情,即:
+ (Class<NCParser>)getParserClass {
return [NCCurrencyParser class];
}
和
Class<NCParser> parserClass = [Application getParserClass];
[parserClass parserNumber:1.0];
在xcode 3.2.3,iPhone模拟器4.0,GCC 4.2上构建/编译/测试
答案 1 :(得分:1)
发生了什么......这看起来非常错误。
但是Class<NCParser> parserClass = [Application getParserClass];
应该正常工作
答案 2 :(得分:0)
“然后编译器给了我 parserClass可能无法响应的错误 to parseNumber“
如果您只是需要忽略错误消息。 把它放在具有调用方法的类中:
#import "NCParser.h"
将解决您的问题。它只是有效!
我认为XCode基于您的导入来确定Class
的方法。
“我怎么能强迫班级必须这样做 采用一些协议,如:Class“
您可以使用NCObject
在编译时检查id
或id <AProtocol>
是否符合协议。但我认为你不能为Class
对象做到这一点。
我的方法是在运行时检查它。像这样:
NSObject *object = [[class alloc] init];
NSAssert ([object conformsToProtocol:@protocol(AProtocol)],
@"`class` should conform AProtocol");