【发布时间】:2016-10-22 16:47:18
【问题描述】:
代码示例来自swift office document
let digitNames = [
0: "Zero", 1: "One", 2: "Two", 3: "Three", 4: "Four",
5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"
]
let numbers = [16, 58, 510]
let strings = numbers.map {
(number) -> String in
var number = number //What is this!
var output = ""
while number > 0 {
output = digitNames[number % 10]! + output
number /= 10
}
return output
}
我对闭包体内的var number = number 线感到非常困惑。您如何“重新声明”具有相同范围的变量?
【问题讨论】:
-
在
(number) -> String中,number参数是一个常数。所以你用它做了一个 var ,它就变成了可变的。在作用域中,使用可变的一个,忽略另一个。这种“重新声明”只适用于函数范围内的函数参数。 -
@EricD:这也适用于其他本地范围,不仅适用于函数参数。
-
@MartinR Swift 3 关于这个属性有什么改变吗?
-
@MartinR 啊,是的,谢谢。这就是为什么我发表评论而不是完整答案的原因,我害怕错过或弄乱某些东西......我做到了。 :)
-
顺便说一句,这正是
if let var = var或guard let var = var else正在做的事情。