在Swift中如何将整数(Int)转换为字符(Character)

56

我已经在这里挣扎并失败了十多分钟,我放弃了。我需要将Int转换为Swift中的Character,但无法解决。

问题

如何在Swift中将Int(整数)转换为Character(字符)?

示例问题/任务挑战

生成一个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! :)
9个回答

52

你无法直接将一个整数转换为一个 Character 实例,但是你可以从整数转换为 UnicodeScalar,再从 UnicodeScalar 转换为 Character,然后再转回整数:

let startingValue = Int(("A" as UnicodeScalar).value) // 65
for i in 0 ..< 26 {
    print(Character(UnicodeScalar(i + startingValue)))
}

2
那个UnicodeScalar初始化器是可选的,而那个Character初始化器不接受可选项。你必须做一些类似的事情 Character(UnicodeScalar(i + startingValue)!) - jakehawken

12

如何在Swift中将Int转换为Character

出于日后访客的考虑,我将提供一个基本的答案来回答这个问题的标题,而不是问题本身的细节。

这是一个两步骤的过程。将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)
}

参见


11

试一试

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

9
到目前为止,我已经想出了这个方案:
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
为了提供有用的背景信息,使用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)
}

好的,没问题...你是对的,我很讨厌这个。完成了!这是C风格的,如果有人需要的话 - - J-Dizzle
1
for(var i:Int=0; i<26; i++) { var itemStr:String = String(UnicodeScalar(i + startingValue)); items.append(String(format: "项目 '%@'", itemStr));} - J-Dizzle
1
很好的发现。我用你提出的“items.append("Item " + itemStr)”替换了原来的“items.append(String(format: "Item '%@'", itemStr))”。 - J-Dizzle

3

将整数转换为字符串,然后将字符串转换为字符即可。

let number = 5
let numChar = Character(String(number))

1
//Current swift version is 5.7

//Prints character of unicode scaler 65
let num = 65
if let character = UnicodeScalar(num) {
    print(character) // prints A
}

//Similarly looping over 'a...z' 
let numRange = 97...122
for num in numRange {
    print("\(num) = \(UnicodeScalar(num)!)")
}

1
这是一个用于 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
    }
}

请注意,如果整数大于26,则会得到特殊字符。

1
新的和更新的
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

虽然我们应该知道Unicode,但不需要查找它?哈哈等等...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接