当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift Unicode.UTF16 decode(_:)用法及代码示例


实例方法

decode(_:)

开始或继续解码 UTF-16 序列。

声明

mutating func decode<I>(_ input: inout I) -> UnicodeDecodingResult where I : IteratorProtocol, I.Element == UInt16

返回值

UnicodeDecodingResult 实例,表示下一个 Unicode 标量、错误指示或 UTF 序列已完全解码的指示。

参数

input

要解码的代码单元的迭代器。 input 在重复调用此方法时必须是相同的迭代器实例。不要在此方法之外推进迭代器或迭代器的任何副本。

详述

要完全解码代码单元序列,请重复调用此方法,直到它返回 UnicodeDecodingResult.emptyInput 。检查迭代器是否耗尽是不够的,因为解码器可以存储来自输入迭代器的缓冲数据。

由于缓冲,不可能在迭代器中找到给定返回的Unicode.Scalar 或错误的对应位置。

以下示例将字符串的 UTF-16 编码字节解码为 Unicode.Scalar 实例数组。这只是一个演示——如果您需要字符串的 Unicode 标量表示,请使用它的 unicodeScalars 视图。


let str = "✨Unicode✨"
print(Array(str.utf16))
// Prints "[10024, 85, 110, 105, 99, 111, 100, 101, 10024]"


var codeUnitIterator = str.utf16.makeIterator()
var scalars: [Unicode.Scalar] = []
var utf16Decoder = UTF16()
Decode: while true {
    switch utf16Decoder.decode(&codeUnitIterator) {
    case .scalarValue(let v): scalars.append(v)
    case .emptyInput: break Decode
    case .error:
        print("Decoding error")
        break Decode
    }
}
print(scalars)
// Prints "["\u{2728}", "U", "n", "i", "c", "o", "d", "e", "\u{2728}"]"

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Unicode.UTF16 decode(_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。