web-dev-qa-db-fra.com

Comment convertir un int en personnage dans Swift

J'ai lutté et échoué pendant plus de dix minutes ici et je cède. Je dois convertir un Int en personnage dans Swift et je ne peux pas le résoudre. 

Question

Comment convertissez-vous (cast) une Int (integer) en une Character (char) dans Swift?

Problème illustratif/tâche complexe

Générez une boucle for qui imprime les lettres «A» à «Z», par exemple. quelque chose comme ça: 

    for(var i:Int=0;i<26;i++) {      //Important to note - I know 
        print(Character('A' + i));   //this is horrendous syntax...
    }                                //just trying to illustrate! :)
28
J-Dizzle

Vous ne pouvez pas convertir un entier directement en une instance Character, mais vous pouvez passer d'un entier à UnicodeScalar à Character et inversement

let startingValue = Int(("A" as UnicodeScalar).value) // 65
for i in 0 ..< 26 {
    print(Character(UnicodeScalar(i + startingValue)))
}
27
Nate Cook

Jusqu'à présent, j'ai trouvé ceci:

for i in 0 ..< 26 {
    print(Character(UnicodeScalar(Int(UnicodeScalar("A").value) + i)))
}

Si vous essayez simplement de générer "A" en "Z", vous pouvez éviter les calculs et faire simplement:

for c in UnicodeScalar("A").value...UnicodeScalar("Z").value {
    print(String(UnicodeScalar(c)))
}
8
vacawama

Comment convertir un int en personnage dans Swift

Dans l'intérêt des futurs visiteurs, je fournis une réponse de base au titre de la question plutôt qu'aux détails de la question elle-même.

C'est un processus en deux étapes. Convertissez Int en UnicodeScalar, puis convertissez UnicodeScalar en Character

let myInteger: Int = 97

// convert Int to a valid UnicodeScalar
guard let myUnicodeScalar = UnicodeScalar(myInteger) else {
    return
}

// convert UnicodeScalar to Character
let myCharacter = Character(myUnicodeScalar)

// results
print(myCharacter) // a

(la source)

Ou bien...

if let myUnicodeScalar = UnicodeScalar(97) 
    let myCharacter = Character(myUnicodeScalar)
}

Voir également

7
Suragch

essaye ça

for i in 0...25
{
    let string = String(format: "%c", i+65) as String
    NSLog("%@", string)
}
6
Saurabh Prajapati

Pour un contexte utile, prenez UnicodeScalar de vacawama et de Nate Cook à utiliser - 

 let startingValue = Int(UnicodeScalar("A").value)
 for i in 0..<26 {
    let itemStr = String(UnicodeScalar(i + startingValue))

    items.append("Item " + itemStr)
}
1
J-Dizzle

Voici une extension permettant à Int de fournir une fonction de correspondance correspondante:

extension Int {
    func correspondingLetter(inUppercase uppercase: Bool = false) -> String? {
        let firstLetter = uppercase ? "A" : "a"
        let startingValue = Int(UnicodeScalar(firstLetter)!.value)
        if let scalar = UnicodeScalar(self + startingValue) {
            return String(scalar)
        }
        return nil
    }
}

Notez que si l'int est plus grand que 26, vous obtiendrez des caractères spéciaux.

0
CedricSoubrie