所以我采用了我的捆绑版本并将其保存在一个数组中,但它的类型为String。我试过并将它映射为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 })
}
}
答案 0 :(得分:1)
角色和Ints之间没有直接转换。如果您想从字符串中提取版本号,以下可能是更好的方法。它还允许版本号大于9
let versionName = String(describing: Bundle.main.infoDictionary!["CFBundleShortVersionString"]!) // 1.9.1
let versionComponents = versionName.components(separatedBy: ".")
let convertedToInt = versionComponents.map {Int($0)}
这个版本会输出一个Int?数组。如果你想要一个Int数组,你可以使用
let convertedToInt = versionComponents.map {Int($0)!}
但你必须确保没有发送带有非数字字符的字符串。
答案 1 :(得分:0)
我用这个:
let versionString = (Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String) ?? ""
let versionInts = versionString.components(separatedBy: ".").map { Int($0) ?? 0 }
答案 2 :(得分:0)
在没有westernArabicNumeralsOnly函数的情况下轻松获取数字
let versionName = String(describing: Bundle.main.infoDictionary!["CFBundleShortVersionString"]!) // 1.9.1
let versionNumeral = Array(versionName.components(separatedBy: ".")) // ["1","9","1"]
let convertedToInt = versionNumeral.map{Int($0)} // [1,9,1]
var total = 0
for element in convertedToInt {
total = total + element!
}
print(total) // 11