试图做(来自重复循环)的主要逻辑是什么?
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"]
答案 0 :(得分:1)
整个闭包描述了如何将Html Helpers
之类的数字转换为510
之类的字符串,您可能已经知道了。 FiveOneZero
循环获取数字的每个数字,并将相应的字符串插入字符串repeat
的开头。
循环从最右边的数字到最左边的数字。通过使用output
,我们可以将最后一位与其余数字分开。然后使用分隔的数字在字典中查找相应的字符串。该字符串将插入% 10
的开头。
现在我们除以10。请注意,我们正在使用整数,因此发生了整数除法。 123/10等于12。如您所见,它去除了最右边的数字(我们已经在输出中添加了最右边的数字!),以便在下一次迭代中可以处理下一个数字。 / p>
我们一直这样做,直到除以10后的数字为0。只有当除数之前的数字是一位数字并且该位是我们处理的最后一位数字时,才会发生这种情况。
答案 1 :(得分:-1)
也许可以帮助您尝试这个。
public extension Int {
public var asWord: String {
let numberValue = NSNumber(value: self)
let formatter = NumberFormatter()
formatter.numberStyle = .spellOut
return formatter.string(from: numberValue)!
}
}
使用:-
var arr = [String]()
let numbers = [34,32,455]
numbers.map({($0.asWord)
print("\($0.asWord)")
arr.append($0.asWord)
})
print(arr)