2015-05-17 28 views
1

我在網上發現的有關Objective C中方法參數的所有內容都是可選的,但如果我沒有標記某些方法的每個輸入參數,我該如何訪問它們?如何訪問某些方法的Objective C未命名參數?

這裏是什麼,我試圖做一個例子:

- (float) divNum1: (int) AndNum2: (int); 

那麼它甚至不進行編譯,說

的標識是之前預期;

所以對方法的實現上面我要訪問的每個輸入參數:

- (float) divNum1: (int) AndNum2: (int) 
{ 
    return <first parameter>/<second parameter>; 
} 

我知道如何解決這個使用標籤,我需要的就是這個問題沒有解決方案命名每個參數。

+2

因此,您不明白Objective-C方法聲明的語法的問題? – matt

+3

可選部分不是您認爲可選的部分。 – rmaddy

+0

感謝所有的答案,現在我看到了我的錯誤。什麼是可選的是方法名稱的附加部分,而不是參數名稱。 –

回答

3

這個標籤是之前的東西的類型。你可以省略它們(除了第一個,因爲它是方法的名稱)。所以,你被允許這樣聲明:

- (float) divNum1: (int) a : (int) b; 

,並確定它是這樣的:

- (float) divNum1: (int) a : (int) b { 
    return (float)a /(float)b; 
} 

,並調用它是這樣的:

[self divNum1:5 :6]; 

你不能忽略的名字後類型,因爲這些是方法體使用的內部名稱。

+0

並參閱我的書:http://www.apeth.com/iOSBook/ch03.html#_sending_a_message – matt

0

交錯參數名稱是可選的,而不是參數名稱。

不管怎麼說,這裏的聲明

- (float)div:(int)num1:(int)num2; 

使用

[self div:2 :3]; 

實現

- (float)div:(int)num1:(int)num2 { 
    return (float)num1/num2; 
} 

該方法本身被稱爲-div::。 (注意兩個冒號)

但是蘋果discourages this behaviour

如果你不喜歡這樣,你可以嘗試一些類似swift的東西,你可以省略方法的很多部分。

您應該使用- (float) div:(int)num1 with:(int)num2;來代替。

+0

而且要清楚,方法的名稱是'div ::'(注意兩個冒號 - 它們是方法名稱的一部分)。 – rmaddy

+0

@rmaddy補充說,謝謝。 – Schemetrical

2

您錯誤地知道該方法的哪一部分是可選的。僞參數方法名是可選的,但所有的物理參數必須在那裏。考慮以下方法。

- (void)parameterOne:(int)p1 :(int)p2 
//       ^^^ 
{ 
    int p3 = p1 * p2; 
} 

這種方法就像這樣調用。

[self parameterOne:10 :20]; 

所以你可以看到,該方法的相應部分是可選的,但不是參數名。