不同語言傳遞參數的方式-Objective-C中一個方法如何傳遞多個參數的理解

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章