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! :)
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)))
}
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)))
}
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
Ou bien...
if let myUnicodeScalar = UnicodeScalar(97)
let myCharacter = Character(myUnicodeScalar)
}
essaye ça
for i in 0...25
{
let string = String(format: "%c", i+65) as String
NSLog("%@", string)
}
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)
}
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.