Swift中的映射函数将字符串转换为Int?

Swift中的映射函数将字符串转换为Int?,swift,map,Swift,Map,我希望有人能解释这段代码是如何工作的(摘自苹果的开发者页面“closures”下的swift)。我不太确定“while”中的代码是什么“循环意味着:/p数字转换为字符串的准确程度如何?map函数是高阶函数,用于对数组的单个元素执行某些操作,并返回操作后生成的转换数组 numbers.map将遍历数组的每个元素,并通过执行一些操作来转换元素,然后返回一个转换后的数组 let digitNames = [ 0: "Zero", 1: "One", 2: "Two", 3: "Three"

我希望有人能解释这段代码是如何工作的(摘自苹果的开发者页面“closures”下的swift)。我不太确定“while”中的代码是什么“循环意味着:/p数字转换为字符串的准确程度如何?

map
函数是高阶函数,用于对数组的单个元素执行某些操作,并返回操作后生成的转换数组

numbers.map
将遍历数组的每个元素,并通过执行一些操作来转换元素,然后返回一个转换后的数组

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"]
1) 对于while循环的第一次迭代中数组中的第一个元素
16
number%10
在除以
10
后将返回6作为16的提示,因此
digitName[6]
输出分配给
Six

output = digitNames[number % 10]! + output  
2) 它将
number
除以10,得到1,此时数字将为
1

3)
数字>0时{
检查数字是否大于0是
1

4) 现在再次迭代
digitNames[number%10]!
return
One
,通过追加以前的输出,它将变成
One
append
output
(即六个)。因此
OneSix

output = digitNames[number % 10]! + output  
您的第一个元素成为
OneSix
。这将对每个元素和所有元素
map
返回
String
数组后都完成。因此最后
String
成为


[“OneSix”、“FiveEight”、“FiveOneZero”]

这只是数学。
%
是模运算符,
/=
将左手边除以右手边。显然,此代码提取了
数字的各个数字。