【发布时间】:2018-07-25 04:15:12
【问题描述】:
这是来自 swift 文档的示例代码。我正在学习 swift 语言,我看到函数类型作为参数,示例代码没有 inout 关键字。但我正在尝试将其与 inout 参数一起使用,但以下示例未按预期工作。
https://docs.swift.org/swift-book/LanguageGuide/Functions.html(函数类型作为返回类型)
//Function Types as Return Types
func stepForward(_ input: inout Int) -> Int {
return input + 1
}
func stepBackward(_ input: inout Int) -> Int {
return input - 1
}
func chooseStepFunction(backward: Bool) -> (inout Int) -> Int {
let a = backward ? stepBackward : stepForward
return a
}
var currentValue = 3
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)
print(moveNearerToZero(¤tValue))
print(currentValue)
实际输出 2 3
预期输出 2 2
因为 CurrentValue 是 inout 参数。将 currentValue 作为 3 传递最初使用 stepBackward() 方法打印值 2
并且我想在减量后保持该值。
但是这里没有维护currentValue。
【问题讨论】:
-
我认为,Apple 文档需要更正。
-
@Kamran 实际上,OP 没有尝试文档中的确切示例。相反,他试图通过自己修改的示例来理解
inout的概念。 -
@Vishnu 如果您没有真正更改函数内参数的值,那么使用参数作为
inout有什么意义? -
@nayem 是的,实际上在该示例中没有使用
inout,因为它是为了演示如何返回函数类型。所以它可能会让新手感到困惑。 -
@nayem,感谢指出错误,输入值没有改变是我的错误,只是学习新的。接受下面的答案。
标签: swift swift4 swift-playground