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 {
(var number) -> String in
var output = ""
while number > 0 {
output = digitNames[number % 10]! + output
number /= 10
}
return output
}
// strings is inferred to be of type [String]
// its value is ["OneSix", "FiveEight", "FiveOneZero"]
我希望是否有人可以解释这段代码是如何工作的(它取自苹果的“闭包”下的 swift 开发者页面)。我不太确定,特别是“while”循环中的代码意味着什么:/数字到底是如何转换成字符串的?
最佳答案
map
函数是高阶函数,它用于对array
的单个元素进行一些操作,并返回操作后生成的转换后的数组。
numbers.map
会遍历数组的每个元素,并通过一些操作对元素进行变换,并返回变换后的数组。
output = digitNames[number % 10]! + output
1) 对于 while 循环的第一次迭代中数组 16
中的第一个元素 number % 10
将返回 6 作为 16 的提醒,除以 10
因此 digitName[6]
会将 output
分配给 Six
let strings = numbers.map {
(var number) -> String in
var output = ""
while number > 0 {
output = digitNames[number % 10]! + output //16
number /= 10
}
return output
}
2) 将number
除以10,得到1,现在number将是1
3) while number > 0 {
检查 number 是否大于 0,是的,它是 1
4) 现在再次迭代 digitNames[number % 10]!
返回 One
并通过附加之前的输出,它将变成 One
附加输出
(即六)。所以OneSix
你的第一个元素成为OneSix
。这将为每个元素完成,并且在所有元素map
返回String
数组之后。所以最后字符串
变成
[“OneSix”、“FiveEight”、“FiveOneZero”]
关于swift - Swift 中的映射函数将 String 转换为 Int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26570633/