swift - Swift 中的映射函数将 String 转换为 Int?

标签 swift dictionary

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/

相关文章:

ios - 如何清除Swift或Objective-C中对NSComboBox的选择?

pointers - Swift 使用 UnsafePointer<String> 从 UnsafeMutablePointer<Void> 获取值

ios - 如何编写谓词来过滤字典数组?

c# - 包装字典以提高可读性?

JSON 字典对象到 Swift 中的字符串

ios - 如何使用 iOS8 Social Framework Swift 将视频文件附加到 Publish on Facebook

ios - 在 UIViewController 中使用 tableView 有什么好处?

ios - Sprite 有时会消失 [Sprite Kit]

java - 使用 Map 和不同类的 NullPointerException

python - 比较没有关键重要性的字典的嵌套值