0

、、およびクラスBHIDataFormatterによって実装される という名前の Objective-C でプロトコルを作成しました。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 に答える