我正在用swift编写一个例程,它需要尝试将任意整数转换为unicodescalar或返回错误。constructorUnicodeScalar(_:Int)
为有效的代码点执行作业,但当传递的整数不是有效的代码点时,它会崩溃。
是否有一个快速(或基础)函数,我可以调用飞行前,一个整数i
是一个有效的Unicode代码点,不会导致UnicodeScalar(i)
崩溃吗?
最佳答案
Swift 3的更新:UnicodeScalar
现在有一个可失败的初始值设定项,用于验证
给定的数字是否为有效的Unicode码位:
if let unicode = UnicodeScalar(0xD800) {
print(unicode)
} else {
print("invalid")
}
(上一个答案:)您可以使用内置的
UTF32()
编解码器检查给定的整数是有效的Unicode标量:
extension UnicodeScalar {
init?(code: UInt32) {
var codegen = GeneratorOfOne(code) // As suggested by @rintaro
var utf32 = UTF32()
guard case let .Result(scalar) = utf32.decode(&codegen) else {
return nil
}
self = scalar
}
}
(使用来自https://stackoverflow.com/a/24757284/1187415
和https://stackoverflow.com/a/31285671/1187415)