Swift3之函數(shù)(二)

Swift3之函數(shù)(一)

進(jìn)階部分

1.函數(shù)參數(shù) -- 外部參數(shù)名 2.下滑線 -- _ 3.函數(shù)參數(shù) -- 設(shè)置參數(shù)默認(rèn)值 4.函數(shù)類型 -- 函數(shù)作為函數(shù)的參數(shù),返回值 5.函數(shù)嵌套

1.函數(shù)參數(shù) - 外部參數(shù)名

func 函數(shù)名(外部參數(shù)名 局部參數(shù)名: 參數(shù)類型) {}
要注意的是: -- 外部參數(shù)名只能外部使用,內(nèi)部參數(shù)名只能內(nèi)部使用 -- 并非每一個參數(shù)都需要設(shè)置外部參數(shù)名,未設(shè)置外部參數(shù)名的參數(shù)可以當(dāng)作外部參數(shù)名和局部參數(shù)名一樣 也就是對想用對參數(shù)用,不想用的不用??

// 字符串拼接
// 外部參數(shù)名是為了讓參數(shù)在外部調(diào)用時能明確參數(shù)的含義,內(nèi)部調(diào)用時參數(shù)簡短已用
//   - s1: 外部參數(shù)名為firstStr 內(nèi)部只能使用s1,外部只能使用 firstStr
//   - targetStr: 內(nèi)外都是用 targeyStr


func appendString(firstStr s1 : String, targetStr : String) -> String
{
    return s1 + targetStr;
}

print(appendString(firstStr: "123", targetStr: "456"));

2.下滑線 _

外部參數(shù)如果使用_,在外部掉用函數(shù)時候,會省略形參的名字

// 字符串拼接
// 
//   - s1: 外部參數(shù)名為`_`內(nèi)部只能使用s1,外部無參數(shù)名
//   - targetStr: 內(nèi)外都是用 targeyStr

func appendString(_ s1 : String, targetStr : String) -> String
{
    return s1 + targetStr;
}

print(appendString("123", targetStr: "456"));

3.函數(shù)參數(shù) - 設(shè)置參數(shù)默認(rèn)值

func 函數(shù)名(參數(shù) :類型=默認(rèn)值){}
說明 1:如果參數(shù)不賦值,參數(shù)值就采用默認(rèn)值 2:如果一個參數(shù)有默認(rèn)值,那么在調(diào)用的時候就不一定需要傳入?yún)?shù),可以使用默認(rèn)值 3:一般在聲明一個函數(shù)的時候,都把有默認(rèn)參數(shù)值的參數(shù)放到最后,而必須賦值的參數(shù)放在前面。

// 測試參數(shù)的默認(rèn)值
// 建議帶默認(rèn)值的參數(shù)放在最后,但是并不代表你不可以放前面,只是為了代碼的可讀性放后面比較好
//   - value1: 沒有默認(rèn)值的參數(shù)在方法調(diào)用時必須傳值
//   - value2: 有默認(rèn)值的參數(shù)在方法調(diào)用時可以不傳值,使用默認(rèn)值
//   - value3: 沒有默認(rèn)值的參數(shù)在方法調(diào)用時必須傳值
//   - value4: 有默認(rèn)值的參數(shù)在方法調(diào)用時可以不傳值,使用默認(rèn)值

func testDefaultValue(value1: Int,value2: Int = 2,value3: Int,value4: Int = 4)
{
    let sum = value1 + value2 + value3 + value4;
    
    print(sum);
}

testDefaultValue(value1: 1, value3: 3)
testDefaultValue(value1: 1, value2: 2, value3: 3)
testDefaultValue(value1: 1, value3: 3, value4: 4)
testDefaultValue(value1: 1, value2: 2, value3: 3 , value4: 7)

/*
不要再定義以上調(diào)用的四種函數(shù)的實現(xiàn),否則會發(fā)生未知錯誤?
要么會發(fā)生方法重復(fù)直接報錯,要么就是會發(fā)生方法覆蓋。
具體會怎樣可以自己試驗,這里我就不在舉例說明了,情況太亂,
越說會讓人感覺越復(fù)雜
*/

4.函數(shù)類型

在 Swift 中,使用函數(shù)類型就像使用其他類型一樣。例如,你可以定義一個類型為函數(shù)的常量或變量,并將適當(dāng)?shù)暮瘮?shù)賦值給它

類型公式: 就是把函數(shù)的公式,去除func,去除參數(shù)名,去除{}的剩余部分
(參數(shù)類型1,參數(shù)類型2...)->返回值類型

func sum(a: Int, b: Int) -> Int {
   return a + b
}

var addition: (Int, Int) -> Int 

addition = sum

print("輸出結(jié)果: \(addition(40, 89))")
既然有函數(shù)類型,那么函數(shù)類型也可以作為函數(shù)參數(shù)及返回值
//函數(shù)作為參數(shù)
func sum(a: Int, b: Int) -> Int {
    return a + b
}

//sunNumber 是一個函數(shù)類型,調(diào)用時傳入一個函數(shù)
func test(sumNumber: (Int, Int) -> Int, a: Int, b: Int) {
    print("輸出結(jié)果: \(sumNumber(a, b))")
}

test(sumNumber: sum, a: 10, b: 20)

//函數(shù)作為返回值
func test() ->(Int) -> Int {
    //內(nèi)嵌函數(shù)
    func add(a:Int) -> Int{
        return a+1;
    }
    return add;
}

 test()(20)

5.函數(shù)嵌套

上面的示例使用到了內(nèi)嵌函數(shù),也就是swift函數(shù)中可以聲明實現(xiàn)另一個函數(shù)

你可以繼續(xù)學(xué)習(xí)Swift3之閉包

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容