Swift5 字符(Character)操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift5 字符(Character)操作相关的知识,希望对你有一定的参考价值。

参考技术A Swift5 字符串(String)操作
Swift5 字符(Character)操作
Swift5 数组(Array)操作
Swift5 字典(Dictionary)操作
Swift5 集合(Set)操作
Swift5 简单使用
Swift OC动态调试工具 InjectionIII 使用

如何在 Swift 中将 Int 转换为字符

【中文标题】如何在 Swift 中将 Int 转换为字符【英文标题】:How to convert an Int to a Character in Swift 【发布时间】:2016-03-19 11:37:55 【问题描述】:

我在这里挣扎和失败了十多分钟,我屈服了。我需要在 Swift 中将 Int 转换为 Character,但无法解决。

问题

如何在 Swift 中将(castIntinteger)转换为Characterchar)?

说明性问题/任务挑战

生成一个 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)))

【讨论】:

UnicodeScalar 初始化器是可选的,而 Character 初始化器没有可选的。你必须做一些更像Character(UnicodeScalar(i + startingValue)!)【参考方案2】:

试试这个

for i in 0...25

    let string = String(format: "%c", i+65) as String
    NSLog("%@", string)

【讨论】:

【参考方案3】:

如何在 Swift 中将 Int 转换为字符

为了以后的访问者,我提供的是问题标题的基本答案,而不是问题本身的细节。

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

(source)

或者……

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

另见

How to express Strings in Swift using Unicode hexadecimal values (UTF-16) Working with Unicode code points in Swift

【讨论】:

【参考方案4】:

到目前为止,我想出了这个:

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

【讨论】:

【参考方案5】:

只需将整数转换为字符串,然后将字符串转换为字符

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

【讨论】:

【参考方案6】:

对于有用的上下文,使用 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 风格 - for(var i:Int=0; i 好收获。我用您提出的“items.append("Item" + itemStr) 替换了原来的“items.append(String(format: "Item '%@'", itemStr))”【参考方案7】:

这里是对 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,您将获得特殊字符。

【讨论】:

【参考方案8】:

新的和更新的

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?哈哈等等……

【讨论】:

以上是关于Swift5 字符(Character)操作的主要内容,如果未能解决你的问题,请参考以下文章

springboot Invalid character found in the request target

springboot Invalid character found in the request target

java中Character和char的区别

➽Swift5.5 必知必会——问题清单

Springboot 报错 Invalid character found in the request target. The valid characters are defined in RFC

Character 类