func transcode<Input, InputEncoding, OutputEncoding>(_: Input, from: InputEncoding.Type, to: OutputEncoding.Type, stoppingOnError: Bool, into: (OutputEncoding.CodeUnit) -> Void)

Translates the given input from one Unicode encoding to another by calling the given closure.

The following example transcodes the UTF-8 representation of the string "Fermata 𝄐" into UTF-32.

let fermata = "Fermata 𝄐"
let bytes = fermata.utf8
// 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)
// 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.

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: The Unicode encoding of 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. processCodeUnit: A closure that processes one outputEncoding code unit at a time. Returns: true if the translation detected encoding errors in input; otherwise, false.


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