2013-04-22 94 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