web-dev-qa-db-fra.com

Convertir le caractère en Int dans Swift 2.0

Je veux juste convertir un caractère en Int.

Cela devrait être simple. Mais je n'ai pas trouvé les réponses précédentes utiles. Il y a toujours une erreur. C'est peut-être parce que je l'essaie dans Swift 2.0.

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

Dans Swift 2.0, toInt(), etc., ont été remplacés par des initialiseurs. (Dans ce cas, Int(someString).)

Parce que toutes les chaînes ne peuvent pas être converties en ints, cet initialiseur est disponible, ce qui signifie qu'il renvoie un optionnel int (Int?) Au lieu d'un Int. La meilleure chose à faire est de déballer cette option en utilisant if let.

Je ne sais pas exactement ce que vous cherchez, mais ce code fonctionne en Swift 2, et accomplit ce que je pense que vous essayez de faire:

let unsolved = "123abc"

var fileLines = [Int]()

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

Ou, pour une solution plus rapide:

let unsolved = "123abc"

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

// fileLines = [1, 2, 3]

Vous pouvez raccourcir davantage ceci avec flatMap:

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

flatMap renvoie "un Array contenant les résultats non nuls du mappage transform sur self"… donc quand Int(String($0)) est nil, le résultat est rejeté.

47
Aaron Brager

C'est un truc d'improvisation que j'ai trouvé. Puisqu'il peut être difficile de convertir Character en Int, mais vous pouvez facilement convertir String en Int faites ceci:

fileLines = Int(String(i))!

bien sûr ce n'est pas très bien optimisé mais pour des cas comme le vôtre ça peut faire l'affaire.

9
MiladiuM

Réellement. Un moyen plus simple consiste à convertir String en Int en Swift 2.o est:

let chars = Int(chars)

Je ne sais pas si c'est ce que vous essayez ... Mais vous pouvez facilement l'appliquer à votre boucle, bien sûr.

3
Tuan Anh Vu

Solutions Swift 4

Pour convertir un Character en String:

let digit = Int(String("1"))! 
//Don't force unwrap this if you're not 100% sure your character is a digit

Solution au problème des PO:

let fileLines = unsolved.compactMap{ Int(String($0) }
// fileLines = [1, 2, 3]
3
Declan McKenna

Dans les dernières versions Swift (au moins dans Swift 5), vous n'avez pas besoin d'effectuer de conversion supplémentaire en String).

Character a la propriété wholeNumberValue qui essaie de convertir un caractère en Int et renvoie nil si le caractère ne représente pas et n'est pas un entier.

let char: Character = "5"
if let intValue = char.wholeNumberValue {
    print("Value is \(intValue)")
} else {
    print("Not an integer")
}
0
parametr