如何在Swift中将Unicode字符转换为整数
如何在Swift中将Unicode字符转换为整数
有用户向我的回答之一提出了以下问题:用户问。
我有一个 Unicode 字符
\u{0D85}
。如何获取它的Int
值?
我本来想提供另一个 Stack Overflow 的问题和答案的链接,但是我找不到相关的问题。这些链接涉及的是反向转换:
而这些问题似乎是在询问如何将字符串形式的数字转换为实际的Int
(例如将"1"
转换为1
):
与其试图在评论中回答提问者,我将在下面给出一个答案。对于\u{0D85}
的类型有些不清楚,但我将涵盖各种可能性。
在Swift 5中,Unicode.Scalar有一个value属性,用于表示Unicode字符的数值。value属性的定义如下:
var value: UInt32 { get }
下面的示例代码展示了如何遍历Character或String的unicodeScalars属性,并打印每个Unicode字符的Int32值:
let char: Character = "\u{0D85}"
for scalar in char.unicodeScalars {
print(scalar.value)
}
/*
prints: 3461
*/
let str: String = "\u{0D85}"
for scalar in str.unicodeScalars {
print(scalar.value)
}
/*
prints: 3461
*/
这段代码的目的是将Unicode字符转换为Int值。代码通过遍历字符或字符串的unicodeScalars属性,获取每个字符的Unicode.Scalar,然后打印其value属性。这样就可以将Unicode字符转换为Int值。
如何在Swift中将Unicode字符转换为Int
问题的出现原因:Unicode字符在Swift中以不同的形式存在,例如十六进制、字符串和字符。因此,需要针对不同形式的Unicode字符进行不同的转换方法。
解决方法:
1. 十六进制转Int:如果已知Unicode字符的十六进制值,可以直接将其写成0x开头的形式,因为它已经是一个Int了。
let myInt = 0x0D85 // Int: 3461
2. 字符串转Int:如果Unicode字符以字符串形式存在(带双引号),则默认为String类型。由于它是一个字符串,无法确定在一般情况下是否只有一个Int值。
let myString = "\u{0D85}"
for element in myString.unicodeScalars {
let myInt = element.value // UInt32: 3461
}
3. 字符转Int:Swift的Character是扩展的图形簇,没有utf16或unicodeScalars属性,因此如果从Character开始,则需要先将其转换为String,然后按照上面的字符串转Int部分的方法进行转换。
let myChar: Character = "\u{0D85}"
let myString = String(myChar)
对于Int到Character或String的转换,请参考此答案:stackoverflow.com/a/31284539
需要注意的是,Swift的Character现在具有unicodeScalars属性,可以参考Imanou Petit的答案来进行转换。