Generic Function

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

Translates the given input from one Unicode encoding to another by calling the given closure. 指定された入力をあるユニコード符号化から別のものへと指定されたクロージャを呼び出すことによって翻訳します。

Declaration 宣言

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

Parameters パラメータ

input

An iterator of code units to be translated, encoded as inputEncoding. If stopOnError is false, the entire iterator will be exhausted. Otherwise, iteration will stop if an encoding error is detected. 翻訳されることになるいくらかのコードユニットからなるあるイテレータ、inputEncodingとしてエンコードされます。stopOnErrorfalseならば、イテレータ全体が使い尽くされることになります。そうでなければ、反復はエンコーディングエラーが検出されるならば停止します。

inputEncoding

The Unicode encoding of input. inputのユニコードエンコーディング。

outputEncoding

The destination Unicode encoding. 行き先ユニコードエンコーディング。

stopOnError

Pass true to stop translation when an encoding error is detected in input. Otherwise, a Unicode replacement character ("\u{FFFD}") is inserted for each detected error. trueを渡すと、翻訳はエンコーディングエラーがinputにおいて検出されるときに停止します。そうでなければ、ユニコード代用文字("\u{FFFD}")が各検出エラーに対して挿入されます。

processCodeUnit

A closure that processes one outputEncoding code unit at a time. あるクロージャ、それは一度に1つのoutputEncodingコードユニットを処理します。

Return Value 戻り値

true if the translation detected encoding errors in input; otherwise, false. 翻訳がinputにおいてエンコーディングエラーを検出したならばtrue;そうでなければfalse

Discussion 解説

The following example transcodes the UTF-8 representation of the string "Fermata 𝄐" into UTF-32. 以下の例は、文字列"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]"

The sink closure is called with each resulting UTF-32 code unit as the function iterates over its input. sinkクロージャは、結果UTF-32コードユニットそれぞれで、それのinputに反復していく関数として呼び出されます。