Swift语法_函数类型

每个函数都有种特定的函数类型,由函数的参数类型和返回类型组成。

函数的类型是 (Int, Int) -> Int ,可以解读为“这个函数类型有两个 Int 型的参数并返回一个 Int 型的值。”

使用函数类型(Using Function Types)

//1>使用函数类型
//基本形式
var mathFunction:(Int,Int) ->Int = addTwoInts
mathFunction(2,3)

//有相同匹配类型的不同函数可以被赋值给同一个变量,就像非函数类型的变量一样:
mathFunction = mutiplyTwoInts
mathFunction(2,3)

//就像其他类型一样,当赋值一个函数给常量或变量时,你可以让 Swift 来推断其函数类型:
let anotherMathFunction = addTwoInts
anotherMathFunction(2,3)

函数类型作为参数类型(Function Types as Parameter Types)

//2>函数类型作为参数类型
/**
*  你可以用 (Int, Int) -> Int 这样的函数类型作为另一个函数的参数类型。这样你可以将函数的一部分实现留给函 数的调用者来提供。

优点,作用:
printMathResult(_:_:_:) 函数的作用就是输出另一个适当类型的数学函数的调用结果。它不关心传入函数是如 何实现的,它只关心这个传入的函数类型是正确的。这使得 printMathResult(_:_:_:) 能以一种类型安全(typ e-safe)的方式将一部分功能转给调用者实现。

*/
func prinfMathResult(mathFunction:(Int,Int)->Int,_ a:Int,_ b:Int){
print("Result:\(mathFunction(a,b))")
}
prinfMathResult(mutiplyTwoInts, 3, 5)

函数类型作为返回类型(Function Types as Return Types)

//3>函数类型作为返回值类型
/**
*  你可以用函数类型作为另一个函数的返回类型。你需要做的是在返回箭头( -> )后写一个完整的函数类型。
*/
func stepForward(input:Int)->Int{
return input + 1 //返回值类型(Int) -> Int
}
func stepBackward(input:Int)->Int{
return input - 1
}

func chooseStepFunction(backwards:Bool)->(Int)->Int{
    return backwards ? stepBackward:stepForward
}

var currentValue = 3
let moveNearerToZero = chooseStepFunction(currentValue > 0)
print("Counting to zero:")
while currentValue != 0{
    print("\(currentValue)")
    currentValue = moveNearerToZero(currentValue)
}
print("zero!")

嵌套函数

//4>嵌套函数
/**
*  默认情况下,嵌套函数是对外界不可见的,但是可以被它们的外围函数(enclosing function)调用。一个外围 函数也可以返回它的某一个嵌套函数,使得这个函数可以在其他域中被使用。
*/
func chooseStepFunction2(backwards:Bool)->(Int)->Int{
    func stepForward(input:Int)->Int{
        return input + 1
    }
    func stepBackward(input:Int)->Int{
        return input - 1
    }
    return backwards ? stepBackward:stepForward

}
var currentValue2 = -3
let moveNearerToZero2 = chooseStepFunction(currentValue2 > 0)
print("Counting to zero:")
while currentValue2 != 0{
    print("\(currentValue2)")
    currentValue2 = moveNearerToZero2(currentValue2)
}
print("zero!")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值