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


Swift transcode(_:from:to:stoppingOnError:into:)用法及代码示例


函数

transcode(_:from:to:stoppingOnError:into:)

通过调用给定的闭包将给定的输入从一种 Unicode 编码转换为另一种。

声明

func transcode<Input, InputEncoding, OutputEncoding>(
    _ input: Input,
    from inputEncoding: InputEncoding.Type,
    to outputEncoding: OutputEncoding.Type,
    stoppingOnError stopOnError: Bool,
    into processCodeUnit: (OutputEncoding.CodeUnit) -> Void
) -> Bool where Input : IteratorProtocol, InputEncoding : _UnicodeEncoding, OutputEncoding : _UnicodeEncoding, Input.Element == InputEncoding.CodeUnit

返回值

true 如果翻译检测到 input 中的编码错误;否则,false

参数

input

要翻译的代码单元的迭代器,编码为 inputEncoding 。如果 stopOnErrorfalse ,则整个迭代器将被耗尽。否则,如果检测到编码错误,迭代将停止。

inputEncoding

input 的 Unicode 编码。

outputEncoding

目标 Unicode 编码。

stopOnError

当在 input 中检测到编码错误时,传递 true 以停止翻译。否则,将为每个检测到的错误插入一个 Unicode 替换字符 ("\u{FFFD}")。

processCodeUnit

一次处理一个 outputEncoding 代码单元的闭包。

详述

以下示例将字符串 "Fermata 𝄐" 的 UTF-8 表示形式转码为 UTF-32。


let fermata = "Fermata 𝄐"
let bytes = fermata.utf8
print(Array(bytes))
// Prints "[70, 101, 114, 109, 97, 116, 97, 32, 240, 157, 132, 144]"


var codeUnits: [UTF32.CodeUnit] = []
let sink = { codeUnits.append($0) }
transcode(bytes.makeIterator(), from: UTF8.self, to: UTF32.self,
          stoppingOnError: false, into: sink)
print(codeUnits)
// Prints "[70, 101, 114, 109, 97, 116, 97, 32, 119056]"

sink 闭包在函数迭代其输入时使用每个生成的 UTF-32 代码单元调用。

可用版本

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

相关用法


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