2009-12-28 75 views
2

我有一個關於在Objective-C的第一paramater在Objective C中編寫方法聲明的標準方法是什麼?

-(NSInteger) totalSeconds:(NSInteger)h minutes:(NSInteger)m seconds:(NSInteger)s; 

我注意到這是第一個paramater經常「拉入」消息名稱本身並沒有命名的問題。

[totalSeconds:9 minutes:59 seconds:59] 

就是這種語法接受:

-(NSInteger) totalSeconds:hours:(NSInteger)h 
minutes:(NSInteger)m seconds:(NSInteger)s; 

我環顧四周,並沒有看到這樣的例子,雖然我希望它是常見的。

回答

9

您的特定語法將作爲消息聲明工作,但結果是而不是是您所期望的。

-(NSInteger) totalSeconds:hours:(NSInteger)h 
      minutes:(NSInteger)m seconds:(NSInteger)s; 

編譯器會看到這種情況的方法如下:

-(NSInteger) totalSeconds:(id)hours: 
      (NSInteger)h 
      minutes:(NSInteger)m 
      seconds:(NSInteger)s 

hours變爲參數名稱爲id參數類型,而不是標識符h參數。爲了調用,該呼叫捲起看起來很時髦:

[self totalSeconds:nil :12 minutes:50 seconds:42]; 

請注意,您現在可以傳遞一個對象作爲第一個參數(我選擇nil),字hours不再電話。

我不會以這種方式命名消息。正如Rudedog在這裏所說,這個想法是,你應該能夠像英語句子一樣閱讀電話。去與他的名字相似或Nick Veys'。

從您的評論:

這是我的問題的一部分。那是 的標準方式嗎?要將方法本身的名稱修改爲第一個參數 ,而不是像第一個參數那樣標註第一個參數 。

是的,標準是命名消息,使得第一個參數「name」是消息本身的一部分。瞭解選擇器包含所有這些信息。該消息的選擇,如上面提到,就是:

totalSeconds::minutes:seconds 

爲名爲越好,選擇要讀的東西,如:

totalSecondsFromHours:minutes:seconds 
+1

方法參數的默認類型是id。在上面的例子中,「小時」將被假定爲一個對象。 – NSResponder

+0

@NSResponder:謝謝;更新得當。 –

4

爲什麼不一樣的東西:

-(NSInteger) secondsFromHours:(NSInteger)h minutes:(NSInteger)m seconds:(NSInteger)s 
+1

或者類似的東西:' - (NSInteger的)totalTimeFromHours:(NSInteger的)H分鐘:(NSInteger)m秒:(NSInteger)s'。 – mipadi

+0

這是我的問題的一部分。這是標準的方式嗎?要將方法本身的名稱修改爲第一個參數,而不是像第一個參數那樣標註第一個參數。 – Gazzer

5

我可能會名稱方法

[totalSecondsWithHours:9 minutes:59 seconds:59] 

與方法命名的想法是,你應該能夠讀取呼叫和它看起來像一個英文句子。

4

的「消息名稱」不僅是它的第一個組成部分,但所有在爭論之前的令牌。

考慮一種名爲totalSeconds的方法。容易,這是一個吸氣。有道理,對嗎?現在考慮一種名爲totalSeconds:的方法。這並沒有太大的意義,因爲它沒有確定論據應該是什麼。這就是爲什麼,而不是foo:,你經常看到fooWithBar:,並從該模式,你可以延長fooWithBar:baz:hax:

在第一個示例中,方法名稱爲totalSeconds:minutes:seconds:。我認爲這是一個很好的建議,稱爲secondsFromHours:minutes:seconds:

2

此:

[totalSeconds:9 minutes:59 seconds:59] 

不是有效的消息表達式。 Objective-C的消息的語法是:

[receiver message] 

什麼你上面寫的會試圖發送一個-:minutes:seconds:消息totalSeconds

+0

絕對是真的,但是我想我們都假設他的意思是在'totalSeconds'之前有一個接收器。這可能不是一個有效的假設,但似乎是基於這裏的其餘活動。 :) –

相關問題