函数类型作为返回类型
你可以用函数类型作为另一个函数的返回类型。你需要做的是在返回箭头(->)后写一个完整的函数类型。
下面的这个例子中定义了两个简单函数,分别是 forward(_:) 和 backward(_:)。forward(_:)函数返回一个比输入值大 1 的值。backward(_:) 函数返回一个比输入值小 1 的值。这两个函数的类型都是 (Int) -> Int:
fileprivate func backward(_ input: Int) -> Int {
return input - 1
}
fileprivate func forward(_ input: Int) -> Int {
return input + 1
}
如下名为 moveToNearZero(back:) 的函数,它的返回类型是 (Int) -> Int 类型的函数。moveToNearZero(back:) 根据布尔值 back 来返回 forward(_:) 函数或 backward(_:) 函数
fileprivate func moveToNearZero(back:Bool) -> (Int) -> Int {
return back ? backward : forward
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
var currentNumb = 3
let move = moveToNearZero(back: currentNumb == 3)
// move 现在指向 backward() 函数。
/*
上面这个例子中计算出从 currentNumb 逐渐接近到0是需要向正数走还是向负数走。currentNumb 的初始值是 3,这意味着 currentNumb == 3 为真(true),这将使得 moveToNearZero(_:) 返回 backward(_:) 函数。一个指向返回的函数的引用保存在了 move常量中。
*/
while currentNumb != 0 {
currentNumb = move(currentNumb)
print(currentNumb)
}
}