我搜索过,但无法找到有关此问题的问题。
我很惊讶地发现你可以使用空返回类型声明一个方法:
- ()foo:(int)bar
{
return @"baz";
}
但是如果你没有返回某些内容,编译器会抱怨。没有行return @"baz"
,编译器会说"Control reaches end of non-void function"
。这段代码(甚至没有括号)似乎是一样的:
- foo:(int)bar
{
return @"baz";
}
为什么这些方法有效?返回类型是否由方法体的返回隐含?我假设没有任何返回类型的方法会出现语法错误。
答案 0 :(得分:2)
没有。只是它被隐含地假设为id
。这就是编译器抱怨的原因。顺便说一句,对于aguments也是如此(未指定显式参数类型会导致它被假定为id
)。
Live demo of what I am talking about.
此外,ancient Apple code也使用了这个可怕的符号。