原來如此
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的原因了.