0

我用 Objective-C 编写了一个名为 的协议BHIDataFormatter,它由 BHCsvDataFormatterBHJsonFormatterBHXmlFormatter类实现。

作为主要的 .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];
4

2 回答 2

2

您需要将变量声明为id符合协议的类型

id<BHIDataFormatter> formatter;

那是指id向任何对象的指针,并且
您还声称该对象将符合BHIDataFormatter

于 2012-11-22T23:18:48.150 回答
0

正如保罗已经说过的,你需要使用

id<MyProtocolName> myNewVariable;

这是一个很好的介绍:

http://mauvilasoftware.com/iphone_software_development/2008/05/a-brief-intro-to-objective-cp.html

于 2012-11-22T23:25:33.183 回答