尝试将 Array 转换为 Int 时出错
Error while trying to convert the Array to Int
所以我已经获取了我的捆绑包版本并将其保存在一个数组中,但它是字符串类型。我试过并将其映射为 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([=10=])} // 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 ~= [=11=] ? Character([=11=]) : nil })
}
}
我会用这个:
let versionString = (Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String) ?? ""
let versionInts = versionString.components(separatedBy: ".").map { Int([=10=]) ?? 0 }
Characters 和 Int 之间没有直接的转换。如果您想从字符串中提取版本号,以下可能是更好的方法。它还允许版本号大于 9
let versionName = String(describing: Bundle.main.infoDictionary!["CFBundleShortVersionString"]!) // 1.9.1
let versionComponents = versionName.components(separatedBy: ".")
let convertedToInt = versionComponents.map {Int([=10=])}
这个版本会输出一个 Int? 数组。如果你想要一个 Int 数组,那么你可以使用
let convertedToInt = versionComponents.map {Int([=11=])!}
但您必须确保您收到的不是包含非数字字符的字符串。
Fetch number easily without westernArabicNumeralsOnly function
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([=10=])} // [1,9,1]
var total = 0
for element in convertedToInt {
total = total + element!
}
print(total) // 11
所以我已经获取了我的捆绑包版本并将其保存在一个数组中,但它是字符串类型。我试过并将其映射为 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([=10=])} // 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 ~= [=11=] ? Character([=11=]) : nil })
}
}
我会用这个:
let versionString = (Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String) ?? ""
let versionInts = versionString.components(separatedBy: ".").map { Int([=10=]) ?? 0 }
Characters 和 Int 之间没有直接的转换。如果您想从字符串中提取版本号,以下可能是更好的方法。它还允许版本号大于 9
let versionName = String(describing: Bundle.main.infoDictionary!["CFBundleShortVersionString"]!) // 1.9.1
let versionComponents = versionName.components(separatedBy: ".")
let convertedToInt = versionComponents.map {Int([=10=])}
这个版本会输出一个 Int? 数组。如果你想要一个 Int 数组,那么你可以使用
let convertedToInt = versionComponents.map {Int([=11=])!}
但您必须确保您收到的不是包含非数字字符的字符串。
Fetch number easily without westernArabicNumeralsOnly function
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([=10=])} // [1,9,1]
var total = 0
for element in convertedToInt {
total = total + element!
}
print(total) // 11