2015-10-26 31 views
11

[Xcode 7.1, IOS 9.1]Converti matrice di stringhe in Int Array Swift 2?

Ho un array: var array: [String] = ["11", "43", "26", "11", "45", "40"]

voglio convertire che (ogni indice) in un'Int modo da poter utilizzare per il conto alla rovescia da un temporizzatore, rispettivamente dell'indice .

Come convertire un array String in un array Int in Swift 2?

Ho provato diversi collegamenti, nessuno ha funzionato e tutti mi hanno dato un errore. La maggior parte del codice dei collegamenti è ammortizzata o non è stata aggiornata a swift 2, ad esempio il metodo toInt().

risposta

34

utilizzare la funzione

let array = ["11", "43", "26", "11", "45", "40"] 
let intArray = array.map { Int($0)!} // [11, 43, 26, 11, 45, 40] 

map All'interno di una classe come UIViewController uso

let array = ["11", "43", "26", "11", "45", "40"] 
var intArray = Array<Int>! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    intArray = array.map { Int($0)!} // [11, 43, 26, 11, 45, 40] 
} 

Se l'array contiene tipi diversi è possibile utilizzare flatMap di prendere in considerazione solo gli elementi che possono essere convertiti in Int

let array = ["11", "43", "26", "Foo", "11", "45", "40"] 
let intArray = array.flatMap { Int($0) } // [11, 43, 26, 11, 45, 40] 
+3

la funzione mappa è ok, ma non si dovrebbe raccomandare costringendo unwrap array.map testo {Int ($ 0) ?? 0} sarebbe una scelta migliore (più sicura) –

+1

Hai ragione, ma l'array specificato nella domanda è senza dubbio una serie di numeri convertibili. Spetta allo sviluppatore prendersi cura del tipo se il test opzionale è davvero necessario. – vadian

+0

Ci scusiamo per l'attesa! Il mio TableViewController mi sta dando un errore dice che non riesco a convertire il mio array sul tipo "TableViewController". Esiste un'eccezione per la classe TableViewController? @vadian 'instance member 'array' non può essere utilizzato sul tipo TableViewController' – lukaivicev

1

suggerisco un po 'diverso approccio

let stringarr = ["1","foo","0","bar","100"] 
let res = stringarr.map{ Int($0) }.enumerate().flatMap { (i,j) -> (Int,String,Int)? in 
    guard let value = j else { 
     return nil 
    } 
    return (i, stringarr[i],value) 
} 
// now i have an access to (index in orig [String], String, Int) without any optionals and/or default values 
print(res) 
// [(0, "1", 1), (2, "0", 0), (4, "100", 100)]