2

検索しましたが、これに関する質問は見つかりませんでした。

戻り値の型が空のメソッドを宣言できることに驚きました。

- ()foo:(int)bar
{
    return @"baz";
}

ただし、何かを返さないとコンパイラが文句を言います。行がないreturn @"baz"場合、コンパイラは"Control reaches end of non-void function". このコード (かっこなしでも) は同じようです。

- foo:(int)bar
{
    return @"baz";
}

この種の方法はどのように機能するのでしょうか? 戻り値の型は、メソッド本体の戻りによって暗示されていますか? 戻り値の型のないメソッドがあると構文エラーになると思いました。

4

1 に答える 1

2

いいえ、暗黙のうちに であると想定されているだけですid。それがコンパイラが文句を言う理由です。ちなみに、同じことが引数にも当てはまります (明示的な引数の型を指定しないと、 であると見なされますid)。

私が話していることのライブデモ。

また、古代の Apple コードもこの恐ろしい表記法を使用しています。

于 2013-04-22T21:34:31.847 に答える