Swift 将整数数组转换为字符串数组
主逻辑试图做什么(从重复循环)Swift 将整数数组转换为字符串数组,swift,Swift,主逻辑试图做什么(从重复循环) 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 numb
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
var output = ""
repeat {
output = digitNames[number % 10]! + output
number /= 10
} while number > 0
return output
}
字符串被推断为[String]
它的值是
[“OneSix”、“FiveEight”、“FiveOneZero”]
整个闭包描述了如何将像510
这样的数字转换为像FiveOneZero
这样的字符串,您可能已经明白了。repeat
循环获取数字的每个数字,并将相应的字符串插入字符串输出的开头
循环从最右边的数字到最左边的数字。通过使用%10
,我们可以将最后一位数字与数字的其余部分分开。然后使用分隔的数字在字典中查找相应的字符串。此字符串插入到输出的开头
现在我们除以10。请注意,我们使用的是整数,因此会进行整数除法。123/10等于12。如您所见,这将去掉最右边的数字(我们已经将最右边的数字添加到输出中!),以便在下一次迭代中处理下一个数字
我们一直这样做,直到除以10后的数字为0。只有当除法前的数字是一位数字,并且该位数字是我们处理的最后一位数字时,才会发生这种情况。可能会帮助您尝试此数字
public extension Int {
public var asWord: String {
let numberValue = NSNumber(value: self)
let formatter = NumberFormatter()
formatter.numberStyle = .spellOut
return formatter.string(from: numberValue)!
}
}
使用:-
Xcode附带了一个调试器:设置断点、单步执行代码并检查变量。然后你应该快速地认识到逻辑。如果你认为答案回答你的问题,请考虑通过点击那个复选标记来接受它。这如何回答“主要逻辑试图做什么?”的问题仅仅在没有解释的情况下转储代码是没有任何帮助的。
var arr = [String]()
let numbers = [34,32,455]
numbers.map({($0.asWord)
print("\($0.asWord)")
arr.append($0.asWord)
})
print(arr)