在我的应用程序中,我需要返回“ 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必须采用某些协议,例如:Class <NCParser>(但不起作用)

最佳答案

Objective-C中的类对象是第一类对象,并且可以像其他任何Objective-C对象(id,NSObject *等)一样实现协议。

因此,只需执行通常对任何其他Object协议执行的操作即可,即:

+ (Class<NCParser>)getParserClass {
  return [NCCurrencyParser class];
}




Class<NCParser> parserClass = [Application getParserClass];
[parserClass parserNumber:1.0];


在xcode 3.2.3,iPhone Simulator 4.0,GCC 4.2上构建/编译/测试

10-08 05:28