没有返回类型的方法: - ()foo

时间:2013-04-22 21:33:18

标签: objective-c methods return-value

我搜索过,但无法找到有关此问题的问题。

我很惊讶地发现你可以使用空返回类型声明一个方法:

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

但是如果你没有返回某些内容,编译器会抱怨。没有行return @"baz",编译器会说"Control reaches end of non-void function"。这段代码(甚至没有括号)似乎是一样的:

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

为什么这些方法有效?返回类型是否由方法体的返回隐含?我假设没有任何返回类型的方法会出现语法错误。

1 个答案:

答案 0 :(得分:2)

没有。只是它被隐含地假设为id。这就是编译器抱怨的原因。顺便说一句,对于aguments也是如此(未指定显式参数类型会导致它被假定为id)。

Live demo of what I am talking about.

此外,ancient Apple code也使用了这个可怕的符号。