2013-04-22 78 views
2

我搜索了,但是找不到关于这个的问题。没有返回类型的方法: - ()foo

我很惊讶地发现,你可以声明的方法与空的返回类型:

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

但是编译器会抱怨,如果你不回东西。没有return @"baz"行,编译器说"Control reaches end of non-void function"。此代码(甚至没有括号)似乎是相同的:

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

这些类型的方法是如何工作的?返回类型是否被方法体的返回所隐含?我认为没有任何返回类型的方法会出现语法错误。

回答

2

不,这只是暗示为id。这就是编译器抱怨的原因。顺便说一句,对于aguments也是如此(未指定明确的参数类型导致它被假定为id)。

Live demo of what I am talking about.

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

+0

谢谢,不仅知道这是如何工作的,而且它过去也是这样使用是很好的。 – 2013-04-22 21:50:06

+0

@nevanking不客气。 – 2013-04-22 21:51:23

+1

当ObjC第一次被构思出来时,这个概念很多都是关于将物体链接在一起并用大量的自省来调整行为。事实证明这是无法管理的,OpenStep从这个概念转移到使用'void'返回类型作为大多数(但不是全部)事物的默认和显式类型。 (也就是说,H2CO3是正确的 - 只是增加一些颜色,因为我老了,在那里)。 – bbum 2013-04-22 22:12:50