验证Swift中的Unicode代码点
我正在用Swift编写一个例程,需要尝试将任意整数转换为UnicodeScalar或返回错误。构造函数验证Swift中的Unicode代码点,swift,unicode,Swift,Unicode,我正在用Swift编写一个例程,需要尝试将任意整数转换为UnicodeScalar或返回错误。构造函数UnicodeScalar(u:Int)为有效代码点执行此任务,但当传递的整数不是有效代码点时,它会崩溃 是否有一个Swift(或基础)函数可以在飞行前调用,以确保整数I是一个有效的Unicode码点,并且不会导致UnicodeScalar(I)崩溃?状态 Unicode标量是U+0000到U+0000范围内的任何Unicode代码点 U+D7FF(含)或U+E000至U+10FFFF(含) 对
UnicodeScalar(u:Int)
为有效代码点执行此任务,但当传递的整数不是有效代码点时,它会崩溃
是否有一个Swift(或基础)函数可以在飞行前调用,以确保整数I
是一个有效的Unicode码点,并且不会导致UnicodeScalar(I)
崩溃?状态
Unicode标量是U+0000到U+0000范围内的任何Unicode代码点
U+D7FF(含)或U+E000至U+10FFFF(含)
对于Swift 2.0b4中这些范围内的所有值,UnicodeScalar构造函数不会崩溃。我使用这个方便的构造函数:
extension UnicodeScalar {
init?(code: Int) {
guard (code >= 0 && code <= 0xD7FF) || (code >= 0xE000 && code <= 0x10FFFF) else {
return nil
}
self.init(code)
}
}
分机{
初始化?(代码:Int){
警卫(代码>=0&&code=0xE000&&codeSwift 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
}
}
(使用来自
好的问题和解决方案!为了完整起见,我提供了另一个答案。该功能现在是Swift 3的“内置”功能,请参见下文。GeneratorOfOne(code)
略优于[code]。generate()