Как преобразовать Int в символ в Swift
Я боролся и провалился более десяти минут здесь, и я сдаюсь. Мне нужно преобразовать Int в персонажа в Swift и не может его решить.
Вопрос
Как вы преобразовываете a Int
(integer) в Character
(char) в Swift?
Иллюстративная задача/задача задачи
Создайте цикл for, который печатает буквы "A" и "Z", например. что-то вроде этого:
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! :)
Ответы
Ответ 1
Вы не можете преобразовать целое число непосредственно в экземпляр Character
, но вы можете перейти от целого к UnicodeScalar
в Character
и обратно:
let startingValue = Int(("A" as UnicodeScalar).value) // 65
for i in 0 ..< 26 {
print(Character(UnicodeScalar(i + startingValue)))
}
Ответ 2
До сих пор я придумал следующее:
for i in 0 ..< 26 {
print(Character(UnicodeScalar(Int(UnicodeScalar("A").value) + i)))
}
Если вы просто пытаетесь сгенерировать "A" на "Z", вы можете избежать математики и просто выполните:
for c in UnicodeScalar("A").value...UnicodeScalar("Z").value {
print(String(UnicodeScalar(c)))
}
Ответ 3
попробуйте это
for i in 0...25
{
let string = String(format: "%c", i+65) as String
NSLog("%@", string)
}
Ответ 4
Как преобразовать Int в символ в Swift
Для будущих посетителей я предоставляю основной ответ на вопрос, а не детали самого вопроса.
Это двухэтапный процесс. Преобразуйте Int
в UnicodeScalar
, а затем преобразуйте UnicodeScalar
в 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
(источник)
Или альтернативно...
if let myUnicodeScalar = UnicodeScalar(97)
let myCharacter = Character(myUnicodeScalar)
}
См. также
Ответ 5
Для полезного контекста, принимая vacawama и Nate Cook UnicodeScalar для использования -
let startingValue = Int(UnicodeScalar("A").value)
for i in 0..<26 {
let itemStr = String(UnicodeScalar(i + startingValue))
items.append("Item " + itemStr)
}
Ответ 6
Вот расширение для Int, чтобы обеспечить соответствующую функциюLetter:
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
}
}
Обратите внимание, что если int больше 26, вы получите специальные символы.
Ответ 7
Новое и обновленное
for charac in Unicode.Scalar("A").value...Unicode.Scalar("Z").value {
print(Unicode.Scalar(charac)!, terminator:" ")}
печатает:
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
спасибо за помощь от @vacawama, мне нравится эта версия, для Swift (5), особенно из-за:
for charac in Unicode.Scalar("a").value...Unicode.Scalar("z").value {
print(Unicode.Scalar(charac)!, terminator:" ")}
печатает:
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
и не нужно искать, даже если мы должны знать наш юникод? хаха и тд...