我在Objective-C中编写了一个名为BHIDataFormatter
的协议,该协议由BHCsvDataFormatter
,BHJsonFormatter
和BHXmlFormatter
类实现。
作为.NET开发人员,可以通过以下方式获取所需的实例:
IDataFormatter formatter;
if (csv) formatter = new CsvDataFormatter();
else if (json) formatter = new JsonFormatter();
else if (xml) formatter = new XmlDataFormatter();
else throw SomeException("Cripes");
基本上,我如何在Objecive-C中做同样的事情?我试过了,虽然BHIDataFormatter
是一个“未知类型”:
BHIDataFormatter* formatter;
if (csv) formatter = [[BHCsvDataFormatter alloc] init];
else if (json) formatter = [[BHJsonDataFormatter alloc] init];
else if (xml) formatter = [[BHXmlDataFormatter alloc] init];
else [[NSException exceptionWithName:@"SomeException" reason:@"Cripes" userInfo:nil] raise];
以下似乎有效,虽然看起来过于通用(我宁愿明确地使用BHIDataFormatter
):
Protocol* formatter = [[CsvDataFormatter alloc] init];
答案 0 :(得分:2)
您需要将变量声明为符合协议的类型id
id<BHIDataFormatter> formatter;
即id
是指向任何对象的指针
您还声称该对象符合BHIDataFormatter
答案 1 :(得分:0)
正如保罗所说,你需要使用
id<MyProtocolName> myNewVariable;
这是一个很好的介绍:
http://mauvilasoftware.com/iphone_software_development/2008/05/a-brief-intro-to-objective-c-p.html