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){
return multiplyClosure
}
let doMultiply = giveMeMultiply()
doMultiply(3,5)
Closure當作回傳值,也可以帶出週遭的變數
範例:
func giveMeCounter()->()->(Int){
var counterNumber = 0
func addOne()->Int{
counterNumber += 1
return counterNumber
}
}
轉成Closure
func giveMeCounter()->()->(Int){
var counterNumber = 0
return {
()->Int in
counterNumber += 1
return counterNumber
}
}
giveMeCounter()
let counter = giveMeCounter()
counter()
counter()
Xcode上的效果:
