Closure也可以當作函式的回傳值

範例:

let multiplyClosure:(Int,Int)->(String) = {
    (number1:Int, number2:Int) ->String in
    return "\(number1) * \(number2) = \(number1 * number2)"
}
multiplyClosure(5,7)

func giveMeMultiply ()->(Int,Int)->(String){
//():小括號代表不用接受參數
//(Int,Int)->(String):是接受『二個整數回傳字串』的Closure
    return multiplyClosure
}


let doMultiply = giveMeMultiply()
doMultiply(3,5)
//輸出結果:"3 * 5 = 15"

Closure當作回傳值,也可以帶出週遭的變數

範例:

func giveMeCounter()->()->(Int){
    var counterNumber = 0
    func addOne()->Int{
        counterNumber += 1
        return counterNumber
    }
}
//第一個()    :小括號代表不用接受參數
//第一個()->(Int):回傳一個『不接受參數』、『回傳整數』的Closure
//第二個()->(Int):沒有參數,回傳整數

轉成Closure

func giveMeCounter()->()->(Int){
    var counterNumber = 0
    return {
        ()->Int in
        counterNumber += 1
        return counterNumber
    }
}
giveMeCounter()

let counter = giveMeCounter()
//轉closure的方式:去掉func addOne、移到大括號裡,加入return in
//把giveMeCounter()的閉包存進counter裡面
//意義:不用參數,會回傳整數給我們
counter()    //得到結果:1
counter()    //得到結果:2

Xcode上的效果:

results matching ""

    No results matching ""