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)操作的主要内容,如果未能解决你的问题,请参考以下文章