次のメソッドの定義は(アップルLLVM 4.1を使用して)コンパイルされたときに、私は驚いた:someArgument
のタイプが欠落しているのObjective-Cメソッドの構文
- (void) testMethod:someArgument {
}
注意してください。 Objective-Cのメソッド引数の型指定のルールは何ですか?
次のメソッドの定義は(アップルLLVM 4.1を使用して)コンパイルされたときに、私は驚いた:someArgument
のタイプが欠落しているのObjective-Cメソッドの構文
- (void) testMethod:someArgument {
}
注意してください。 Objective-Cのメソッド引数の型指定のルールは何ですか?
デフォルトの引数型はid
です。でも、これはコンパイルされます:これは、引数としてid
を取り、id
を返すべき方法である
- testMethod:someArgument {
}
。
実際にではなく、さらにメソッド名が必要です。このすべてが非常に悪い習慣です。もちろん、
[self :someObject];
とあなたは常に指定する必要があります:
- :someArgument {
}
これのように呼び出すことができますタイプ(および名前)。
メソッド引数の "type"は、コンパイラと実行時メッセージの受け渡しの両方の型チェックに使用されます。
あなたのプロトタイプで呼び出されている方法は、 "(id)
"と同じです。
詳細については、AppleのProgramming with Objective C documentの「メソッドがパラメータを取る」セクションを参照してください。 "The Objective-C Programming Language" documentの「オブジェクトメッセージング」セクションには、非常に役立つ情報もあります。
言語仕様状態:
戻り値またはパラメータ型が明示的に宣言されていない場合は、メソッドやメッセージ-idのデフォルトのタイプであることを を想定しています。
のObjective-Cプログラミング言語tells us:このような方法 戻り値としてのObjective-Cのオブジェクト指向コンストラクトについて
、IDは、AS INTを置き換えデフォルトのデータ型。 (関数の戻り値などの厳密には のC構文の場合、intはデフォルトの のままです)。
興味深い!私はObjective-Cが ' - :v {}'をコンパイルするのをもっと知っているのが好きです。 – SundayMonday
このようなメソッドを使用する質問には、私は拒否します:-D – DrummerB
そして、コンパイルする方法が最短の場合は、 '-a {}' ;-) – DrummerB