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 中将(cast)Int
(integer)转换为Character
(char)?
说明性问题/任务挑战
生成一个 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
Springboot 报错 Invalid character found in the request target. The valid characters are defined in RFC