提问人:neuraldag 提问时间:9/28/2023 更新时间:9/28/2023 访问量:50
函数类型示例代码 / 需要说明 / Swift
Function Types Example Code / Need Explanation / Swift
问:
我目前正在学习 Swift 函数类型,这本书给了我这样的代码来演示我们如何在函数中使用变量:
var manipulateInteger: (Int, Int) -> Int
func multNumber(_ first: Int, _ second: Int) -> Int {
return first * second
}
func addNumber(_ first: Int, _ second: Int) -> Int {
return first + second
}
manipulateInteger = multNumber
func doMath(_ manipulateInteger: (Int, Int) -> Int, _ a: Int, _ b: Int) {
print("The result is: \(manipulateInteger(a, b))")
}
doMath(addNumbers, 5, 10)
最后一步的注释听起来是这样的:“通过使用第一个参数的 addNumber 调用这个新函数,我们使用新函数对数字求和并输出结果。
我只是想了解我是否做对了:我们更改了 addNumbers 的 manipulateInteger 只是为了表明我们可以将一个函数参数替换为另一个函数参数,因为它们具有相同的函数类型?还是我错过了什么?
答:
1赞
MOWENIK
9/28/2023
#1
在您的例子中,变量 、 函数 和 以及函数中的参数都是相同类型的实体。manipulateInteger
multNumber
addNumber
manipulateInteger
doMath
(Int,Int) −> Int
您可能对闭包变量 var 和函数中的参数共享相同的名称这一事实感到困惑。实际上,它们并不相关,函数参数可以有任何名称。manipulateInteger
manipulateInteger
doMath
在函数内部,当引用参数时,您使用的是调用函数时传递给该参数的值。此值可以是与类型 匹配的任何实体。manipulateInteger
(Int,Int) −> Int
使用相同的属性名称很容易造成混淆。此示例应有助于阐明:
class Calculator {
var manipulateInteger: (Int, Int) -> Int
init(manipulateInteger: @escaping (Int, Int) -> Int) {
self.manipulateInteger = manipulateInteger
}
func doMath(_ manipulateInteger: (Int, Int) -> Int, _ a: Int, _ b: Int) {
let functionParamResult = manipulateInteger(a, b)
print("Result from the function parameter manipulateInteger: \(functionParamResult)")
let classPropertyResult = self.manipulateInteger(a, b)
print("Result from the class property manipulateInteger: \(classPropertyResult)")
}
}
func multNumber(_ first: Int, _ second: Int) -> Int {
return first * second
}
func addNumber(_ first: Int, _ second: Int) -> Int {
return first + second
}
let calculator = Calculator(manipulateInteger: multNumber)
calculator.doMath(addNumber, 3, 5)
执行此代码将生成以下控制台输出:
Result from the function parameter manipulateInteger: 8
Result from the class property manipulateInteger: 15
因此,从函数体中,您可以访问其参数和对象的属性,即使它们具有相同的名称。
评论
1赞
neuraldag
9/28/2023
确实是的!现在我很清楚了。给你大痉刀!
评论