2016-03-28 9 views
2

私はちょうど警告(コンパイラの抑制なし)を避けたいですが、私のファイルにいくつかのインクルードを追加したくありません。ここに私のコードは次のとおりです。ここでプロトコルフォワード宣言の警告はどうですか?

@protocol MyProto; 

// ... 

Protocol *p = @protocol(MyProto); 

は、私が得た警告している:リテラルプロトコル(@protocol)を使用して

@protocol is using a forward protocol declaration of MyProto [-Wat-protocol] 
+1

オプションはありません。タイプを定義する前に、コード内のタイプを使用することはできません。これはクラスにも当てはまります。 – Avi

+0

@Aviはプロトコル 'MyProto'が実行時に存在しない場合、' Protocol * p'のようには見えません。たぶん、これは警告メッセージです。 – k06a

+0

いいえ。警告は、それが意味することを意味します。型を定義する前に型を使用しています。コンパイラは、プロトコルに含まれているものがわからないため、プロトコルの使用をタイプチェックできないことを警告します。 – Avi

答えて

1

は、の定義を参照して、コンパイラを必要とする、コンパイル時のプロトコルへのリンクが必要ですプロトコル。

なぜ「あなたのファイルにインクルードを追加する」ことに反対しているのですか?そのことを使っている実装ファイルに何かを定義しているヘッダファイルを含めることは、とても普通です。欠点はないはずです。

実行時に文字列からプロトコルを検索する場合は、NSProtocolFromString(@"MyProto")のような処理を行うことができます。

関連する問題