有型別可當參數的閉包
各式型別
var telNumber:Int = 9
var willYouMarryMe:Bool = true
var numberArray:[Int] = [3,33,5,9]
練習:請將下面的閉包hello everybody加入型別
let helloClosure = { "hello everybody" }
helloClosure()
解答:
let helloClosure:()->() = { "hello everybody" }
helloClosure()
練習:請將下面的閉包加入型別
let eatClosure = {
(foodName:String) in
"I want to have \(foodName)"
}
eatClosure("apple")
解答:
let eatClosure:(String)->() = {
(foodName:String) in
"I want to have \(foodName)"
}
eatClosure("apple")
練習:請將下面的閉包加入型別
let addClosure = {
(number1:Int, number2:Int) -> Int in
let result = number1 + number2
return result
}
addClosure(3, 8)
解答:
let addClosure:(Int,Int) -> (Int) = {
(number1:Int, number2:Int) -> Int in
let result = number1 + number2
return result
}
addClosure(3, 8)
練習:請將下面的閉包Multiply加入型別
let multiplyClosure = {
(number1:Int, number2:Int) ->String in
return "\(number1) * \(number2) = \(number1 * number2)"
}
multiplyClosure(5,7)
解答:
let multiplyClosure2:(Int,Int)->(String) = {
(number1:Int, number2:Int) ->String in
return "\(number1) * \(number2) = \(number1 * number2)"
}
multiplyClosure2(5,7)
Closure可以當作是一個值

Closure是一個值,所以可以當成函數的參數
範例:
let addClosure:(Int,Int) -> (Int) = {
(number1:Int, number2:Int) -> Int in
let result = number1 + number2
return result
}
addClosure(3, 8)
func cal(num1:Int, num2:Int, operation:(Int,Int)->(Int)){
print(operation(num1, num2))
}
cal(num1: 3, num2: 8, operation: addClosure)