![[Swift]函数类型,第1张 [Swift]函数类型,第1张](/aiimages/%5BSwift%5D%E5%87%BD%E6%95%B0%E7%B1%BB%E5%9E%8B.png)
函数类型
每个函数都有一个特定的函数类型,由函数的参数类型和返回类型组成。
例如:
1 func addTwoInts(_ a: Int,_ b: Int) -> Int {2 return a + b3 }4 5 func multiplyTwoInts(_ a: Int,_ b: Int) -> Int {6 return a * b7 }
这个例子定义了两个简单的数学函数叫做addTwoInts和multiplyTwoInts。这些函数每个都取两个Int值,并返回一个Int值,这是执行适当的数学运算的结果。
这两种功能的类型是。这可以理解为:(Int, Int) -> Int
“一个函数有两个参数,都是类型Int,并返回一个类型的值Int。”
这是另一个例子,对于没有参数或返回值的函数:
1 func printHelloWorld() {2 print("hello,world")3 }
此函数的类型是“或没有参数且返回的函数”。() -> VoIDVoID
您可以像使用Swift中的任何其他类型一样使用函数类型。例如,您可以将常量或变量定义为函数类型,并为该变量分配适当的函数:
var mathFunction: (Int,Int) -> Int = addTwoInts 这可以理解为:
“定义一个名为的变量mathFunction,它的类型为‘一个带两个Int值的函数,并返回一个Int值‘。设置这个新变量来引用被调用的函数addTwoInts。“
该addTwoInts(_:_:)函数与mathFunction变量具有相同的类型,因此Swift的类型检查器允许这种赋值。
您现在可以使用以下名称调用已分配的函数mathFunction:
1 print("Result: \(mathFunction(2,3))")2 // Prints "Result: 5"
具有相同匹配类型的不同函数可以以与非函数类型相同的方式分配给同一变量:
1 mathFunction = multiplyTwoInts2 print("Result: \(mathFunction(2,3))")3 // Prints "Result: 6"
与任何其他类型一样,在将函数赋值给常量或变量时,可以将其保留为Swift以推断函数类型:
1 let anotherMathFunction = addTwoInts2 // anotherMathFunction is inferred to be of type (Int,Int) -> Int函数类型作为参数类型
您可以使用函数类型,例如作为另一个函数的参数类型。这使您可以为函数调用者保留函数实现的某些方面,以便在调用函数时提供。(Int, Int) -> Int
以下是从上面打印数学函数结果的示例:
1 func printMathResult(_ mathFunction: (Int,Int) -> Int,_ a: Int,_ b: Int) {2 print("Result: \(mathFunction(a,b))")3 }4 printMathResult(addTwoInts,3,5)5 // Prints "Result: 8"
此示例定义了一个名为的函数printMathResult(_:_:_:),该函数有三个参数。第一个参数被调用mathFunction,并且是类型。您可以传递该类型的任何函数作为第一个参数的参数。第二和第三参数被称为和,且都是类型的。这些用作提供的数学函数的两个输入值。(Int, Int) -> IntabInt
当printMathResult(_:_:_:)被调用时,它传递的addTwoInts(_:_:)功能,而整数值3和5。它与值调用提供的函数3和5,并打印结果8。
其作用printMathResult(_:_:_:)是将调用结果打印到适当类型的数学函数。这个函数的实现实际上做了什么并不重要 - 只关注函数的类型是正确的。这使得能够printMathResult(_:_:_:)以类型安全的方式将其一些功能传递给函数的调用者。
您可以使用函数类型作为另一个函数的返回类型。您可以通过->在返回函数的返回箭头()之后立即编写完整的函数类型来完成此 *** 作。
下一个示例定义了两个名为stepForward(_:)和的简单函数stepBackward(_:)。该stepForward(_:)函数返回的值比其输入值多一个,并且该stepBackward(_:)函数返回的值比其输入值小1。这两个函数都有以下类型:(Int) -> Int
1 func stepForward(_ input: Int) -> Int {2 return input + 13 }4 5 func stepBackward(_ input: Int) -> Int {6 return input - 17 }
这是一个名为的函数chooseStepFunction(backward:),其返回类型为。该函数根据名为的布尔参数返回函数或函数:(Int) -> IntchooseStepFunction(backward:)stepForward(_:)stepBackward(_:)backward
1 func chooseStepFunction(backward: Bool) -> (Int) -> Int {2 return backward ? stepBackward : stepForward3 }
您现在可以使用chooseStepFunction(backward:)获取一个方向或另一个方向的功能:
1 var currentValue = 32 let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)3 // moveNearerToZero Now refers to the stepBackward() function
上面的示例确定是否需要正或负步骤来移动currentValue逐渐接近零的变量。currentValue具有初始值3,表示返回,导致返回该函数。对返回函数的引用存储在一个被调用的常量中。currentValue > 0truechooseStepFunction(backward:)stepBackward(_:)moveNearerToZero
现在moveNearerToZero指的是正确的函数,它可以用来计数到零:
1 print("Counting to zero:") 2 // Counting to zero: 3 while currentValue != 0 { 4 print("\(currentValue)... ") 5 currentValue = moveNearerToZero(currentValue) 6 } 7 print("zero!") 8 // 3... 9 // 2...10 // 1...11 // zero!总结
以上是内存溢出为你收集整理的[Swift]函数类型全部内容,希望文章能够帮你解决[Swift]函数类型所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)