私はここで10分以上苦労し失敗しましたが、私は屈します。SwiftでIntをCharacterに変換する必要があり、解決できません。
質問
どのように変換しますか(cast)Int
(integer)Character
(char)to Swift?
例示的な問題/タスクチャレンジ
文字 'A'から 'Z'を出力するforループを生成します。このようなもの:
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! :)
整数をCharacter
インスタンスに直接変換することはできませんが、整数からUnicodeScalar
をCharacter
に戻し、再び戻すことはできます。
let startingValue = Int(("A" as UnicodeScalar).value) // 65
for i in 0 ..< 26 {
print(Character(UnicodeScalar(i + startingValue)))
}
これまでのところ、私はこれを思いついた:
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)))
}
これを試して
for i in 0...25
{
let string = String(format: "%c", i+65) as String
NSLog("%@", string)
}
将来の訪問者のために、質問自体の詳細ではなく、質問のタイトルに基本的な回答を提供しています。
これは2段階のプロセスです。 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)
}
有用なコンテキストについては、バカワマとネイトクックのUnicodeScalarを使用してください-
let startingValue = Int(UnicodeScalar("A").value)
for i in 0..<26 {
let itemStr = String(UnicodeScalar(i + startingValue))
items.append("Item " + itemStr)
}
Intが対応するレター関数を提供するための拡張機能を次に示します。
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より大きい場合、特殊文字を取得することに注意してください。
新規および更新
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からのヘルプのthx、私はこのバージョンが好きです、特に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
ルックアップする必要はありません。ユニコードを知っている必要がありますか?ハハなど...