https://www.cnblogs.com/killiancheung/p/4588150.html
原來如此
Objective-C語法中多參數傳遞方法經常是初學者最容易犯困的地方。我自己也是剛剛悟出來與大家分享.
分析
由於我們已有的語言經驗告訴我們定義方法都是:
一個類型匹配一個參數(動態語言甚至可以忽略類型)
例如:
1. C/C++
public void say(char* word1,char* word2)
2. JAVA
public void say(String word1,String word2)
3. C#(跟Java一模一樣)
public void say(String word1,String word2)
4. VB
Public function fun1(word1 as string,word2 as string) as string
5. JS是一個動態語言不需要類型所以只需要定義參數即可
function say(word1,word2)
6. Php
function say($word1,$word2)
7. Python(動態語言不需要類型,類似JS)
def say(word1,word2)
8. ActionScript(動態語言不需要參數)
function say(word1,word2)
9. Perl (好奇心起把這個也找出來了)
sub say{
($word1,$word2) = @_ //@_代表參數名稱
}
Objective-C
而Objective-C是怎麼定義的呢?
-(void) setWord1:(NSString *) word1 setWord2:(NSString *) word2
中文語法解釋是這樣的:
(方法的數據返回類型) 方法名: (參數1數據類型) 參數1的變量名 參數2名稱: (參數2數據類型) 參數2的變量名 ….
我們先看"參數2名稱:(參數2的數據類型) 參數2的變量名"。
*關鍵點: 方法名等於名稱1
看到這裏你明白了嗎?
結論
OC的函數的一個參數是由3個部分組成的,第一個參數的名稱默認爲方法名。你如果把它當作是參數名稱你就會發現,這是一個多麼有愛的"一家三口"啊。但爲啥這樣定義呢?因爲OC中調用方法是這樣的:
[obj setWord1: "參數1值", setWord2: "參數2值" ]
[對象 方法名: 參數1值, 參數2的名稱: 參數2值]
這就是OC的函數參數定義是如此2的原因了.