2015-10-26 9 views
11

[Xcode 7,1 iOS 9,1]Konwertuj Array String na Int Array Swift 2?

mam tablicy: var array: [String] = ["11", "43", "26", "11", "45", "40"]

że chcemy przekształcić ten (każdy wskaźnik) do INT, aby można było używać do odliczania z zegarem, odpowiedniego indeksu .

Jak przekonwertować tablicę String na tablicę Int w Swift 2?

Próbowałem kilka linków, żaden z nich nie działał, a wszystkie dały mi błąd. Większość kodu z linków jest amortyzowana lub nie została zaktualizowana do wersji 2, na przykład metoda toInt().

Odpowiedz

34

Użyj map funkcję

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

obrębie klasy jak UIViewController użytku

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] 
} 

Jeśli tablica zawiera różne typy można użyć flatMap rozważyć tylko te elementy, które mogą być zamienione na Int

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

funkcja mapa jest ok, ale nie należy polecić zmuszając rozpakować tekstu array.map {int ($ 0) ?? 0} byłoby lepszym (bezpieczniejszym) wyborem –

+1

Masz rację, ale podana tablica w pytaniu to bez wątpienia tablica liczb wymienialnych. Programista musi zadbać o to, czy testy opcjonalne są naprawdę potrzebne. – vadian

+0

Przepraszamy za cierpliwość! Moje TableViewController daje mi błąd mówi, że nie mogę przekonwertować mojej tablicy na typ "TableViewController". Czy istnieje wyjątek dla klasy TableViewController? @vadian 'tablica elementów '' nie może być użyta w typie TableViewController' – lukaivicev

1

Proponuję trochę innego podejścia

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)]