web-dev-qa-db-de.com

Wie man einen Int in Swift in einen Charakter konvertiert

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! :)
28
J-Dizzle

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)))
}
27
Nate Cook

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)))
}
8
vacawama

Wie man einen Int in Swift in einen Charakter konvertiert

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

(Quelle)

Oder alternativ...

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

Siehe auch

7
Suragch

versuche dies

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

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)
}
1
J-Dizzle

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.

0
CedricSoubrie

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 ...

0
rezwits