我正在用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

09-06 17:59