2015-06-11 15 views
22

Ich möchte nur eine Zeichen in eine Int konvertieren.Konvertieren von Zeichen in Int in Swift 2.0

Dies sollte einfach sein. Aber ich habe die vorherigen Antworten nicht hilfreich gefunden. Es gibt immer einen Fehler. Vielleicht liegt es daran, dass ich es in Swift 2.0 versuche.

for i in (unsolved.characters) { 
    fileLines += String(i).toInt() 
    print(i) 
} 

Antwort

40

In Swift 2.0, toInt() usw. wurden durch Initialisierer ersetzt. (In diesem Fall Int(someString).)

Da nicht alle Saiten Ints umgewandelt werden kann, diese initializer ist failable, was bedeutet, es gibt eine optional int (Int?) statt nur ein Int. Das beste, was zu tun ist, entpacken Sie dieses optional mit if let.

Ich bin nicht genau sicher, was Sie vorhaben, für, aber dieser Code funktioniert in Swift 2 und vollbringt, was ich denke, Sie versuchen zu tun:

let unsolved = "123abc" 

var fileLines = [Int]() 

for i in unsolved.characters { 
    let someString = String(i) 
    if let someInt = Int(someString) { 
     fileLines += [someInt] 
    } 
    print(i) 
} 

Oder für eine Swiftier Lösung :

let unsolved = "123abc" 

let fileLines = unsolved.characters.filter({ Int(String($0)) != nil }).map({ Int(String($0))! }) 

// fileLines = [1, 2, 3] 

können Sie verkürzen diese mehr mit flatMap:

let fileLines = unsolved.characters.flatMap { Int(String($0)) } 

flatMap gibt "Array mit den Nicht-Null-Ergebnissen des Mappings transform über self" zurück ... also wenn Int(String($0))nil ist, wird das Ergebnis verworfen.

+0

Vielen Dank! Alles funktioniert, außer fileLines ist ein Array von Ints für mich. var fileLines: [Int] = [] (es besagt, dass fileLines + nicht verwenden kann =) – Aaron

+1

Sie können die append-Methode verwenden oder 'fileLines + = [someInt]' –

3

Eigentlich. Ein einfacher Weg ist, String zu konvertieren in Swift 2.o Int:

let chars = Int(chars) 

Nicht sicher, ob dies ist, was Sie versuchen zu ... Aber man kann dies leicht in Ihrer Loop anwenden, natürlich.

+0

Das scheint viel einfacher. –

+7

'chars' kann nicht die neue erzeugte Konstante und der Parameter von' Int' sein. –

+1

Dies gibt einen Kompilierungsfehler zurück –

6

Dies ist ein bisschen Improvisationstrick, den ich mir ausgedacht habe. Da kann es schwierig sein Character-Int zu konvertieren, aber Sie können diese leicht umwandeln String-Int tun:

fileLines = Int(String(i))! 

natürlich nicht sehr gut optimiert ist, aber für Fälle wie Ihr kann es den Trick.