Así que tomé mi versión de paquete y la guardé en una matriz, pero es de tipo String. He intentado y .map para que sea Int pero recibo 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 es una extensión de cadena que elimina mis puntos de la versión y solo deja que los números

extension String {
    var westernArabicNumeralsOnly: String {
        let pattern = UnicodeScalar("0")..."9"
        return String(unicodeScalars
            .flatMap { pattern ~= $0 ? Character($0) : nil })
    }
}
-1
Fagadariu Marcel 23 ene. 2018 a las 12:27

3 respuestas

La mejor respuesta

No hay conversión directa entre Personajes e Ints. Si desea extraer los números de versión de la cadena, la siguiente podría ser una mejor manera de hacerlo. También permitiría números de versión mayores que 9

let versionName = String(describing: Bundle.main.infoDictionary!["CFBundleShortVersionString"]!)  // 1.9.1
let versionComponents = versionName.components(separatedBy: ".")
let convertedToInt = versionComponents.map {Int($0)} 

Esta versión generaría una matriz de Int ?. Si desea una matriz de Int, entonces podría usar

let convertedToInt = versionComponents.map {Int($0)!} 

Pero debe asegurarse de que no se le envíe una cadena con caracteres no numéricos.

1
adamfowlerphoto 23 ene. 2018 a las 09:45

Obtenga el número fácilmente sin la función 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
0
Kamani Jasmin 23 ene. 2018 a las 09:46

Yo usaría esto:

let versionString = (Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String) ?? ""
let versionInts = versionString.components(separatedBy: ".").map { Int($0) ?? 0 }
0
Gereon 23 ene. 2018 a las 09:43