【发布时间】:2018-07-02 01:34:49
【问题描述】:
所以我已经获取了我的捆绑版本并将其保存在一个数组中,但它是字符串类型的。我已经尝试将它映射为 Int 但我收到了Cannot invoke initializer for type 'Int' with an argument list of type''((String.Element))
let versionName = String(describing: Bundle.main.infoDictionary!["CFBundleShortVersionString"]!) // 1.9.1
let versionNumeral = Array(versionName.westernArabicNumeralsOnly) // ["1","9","1"]
let convertedToInt = versionNumeral.map {Int($0)} // so i want it here to be [1, 9, 1] so I can add them between them.
for element in convertedToInt {
total += element
}
.westernArabicNumeralsOnly 是一个字符串扩展,它从版本中删除我的点,只让数字
extension String {
var westernArabicNumeralsOnly: String {
let pattern = UnicodeScalar("0")..."9"
return String(unicodeScalars
.flatMap { pattern ~= $0 ? Character($0) : nil })
}
}
【问题讨论】:
-
在不知道
westernArabicNumeralsOnly返回什么的情况下,我们如何为您提供帮助? -
如果你这样做
let versionNumeral = ["1","9","1"],你的代码就可以工作。那么下一个问题是:westernArabicNumeralsOnly存在吗?这似乎是个问题。 -
我已经编辑了我的问题。该扩展名删除了点并返回“191”
-
有什么特别的原因要写字符串扩展,因为你可以使用 versionName.components(separatedBy: ".") ,现在可以计算总数。