Ich habe hier über zehn Minuten lang gekämpft und bin gescheitert und gebe nach. Ich muss ein Int in einen Charakter in Swift konvertieren und kann es nicht lösen.
Frage
Wie konvertiert man (cast) eine Int
(integer) in eine Character
(char) in Swift?
Illustratives Problem/Aufgabenherausforderung
Erzeugen Sie eine for-Schleife, die die Buchstaben 'A' bis 'Z' druckt, z. etwas wie das:
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! :)
Sie können eine Ganzzahl nicht direkt in eine Character
-Instanz konvertieren, aber Sie können von Ganzzahl zu UnicodeScalar
zu Character
und wieder zurück gehen:
let startingValue = Int(("A" as UnicodeScalar).value) // 65
for i in 0 ..< 26 {
print(Character(UnicodeScalar(i + startingValue)))
}
Bisher bin ich dazu gekommen:
for i in 0 ..< 26 {
print(Character(UnicodeScalar(Int(UnicodeScalar("A").value) + i)))
}
Wenn Sie nur versuchen, "A" bis "Z" zu generieren, können Sie die Mathematik umgehen und einfach Folgendes tun:
for c in UnicodeScalar("A").value...UnicodeScalar("Z").value {
print(String(UnicodeScalar(c)))
}
Für zukünftige Besucher gebe ich eine grundlegende Antwort auf den Fragetitel und nicht die Details der Frage selbst.
Es ist ein zweistufiger Prozess. Konvertieren Sie Int
in ein UnicodeScalar
und anschließend das UnicodeScalar
in ein 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
Oder alternativ...
if let myUnicodeScalar = UnicodeScalar(97)
let myCharacter = Character(myUnicodeScalar)
}
versuche dies
for i in 0...25
{
let string = String(format: "%c", i+65) as String
NSLog("%@", string)
}
Um hilfreiche Informationen zu erhalten, verwenden Sie den UnicodeScalar von vacawama und Nate Cook zur Verwendung von -
let startingValue = Int(UnicodeScalar("A").value)
for i in 0..<26 {
let itemStr = String(UnicodeScalar(i + startingValue))
items.append("Item " + itemStr)
}
Hier ist eine Erweiterung für Int, um eine entsprechende Letter-Funktion bereitzustellen:
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
}
}
Wenn das int größer als 26 ist, werden Sonderzeichen angezeigt.
Neu und aktualisiert
for charac in Unicode.Scalar("A").value...Unicode.Scalar("Z").value {
print(Unicode.Scalar(charac)!, terminator:" ")}
druckt:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
danke für die Hilfe von @vacawama, ich mag diese Version für Swift (5) besonders wegen:
for charac in Unicode.Scalar("a").value...Unicode.Scalar("z").value {
print(Unicode.Scalar(charac)!, terminator:" ")}
druckt:
a b c d e f g h i j k l m n o p q r s t u v w x y z
und nicht aufschauen zu müssen, obwohl wir unseren Unicode kennen sollten? haha etc ...