Generic Instance Method 総称体インスタンスメソッド

decode(_:)

Starts or continues decoding a UTF-8 sequence. あるUTF-8シーケンスのデコードを開始または継続します。

Declaration 宣言

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

Parameters パラメータ

input

An iterator of code units to be decoded. input must be the same iterator instance in repeated calls to this method. Do not advance the iterator or any copies of the iterator outside this method. デコードされることになるいくらかのコード単位のイテレータ。inputは、このメソッドに対して繰り返される呼び出しにおいて同じイテレータでなければなりません。イテレータやなんらかのイテレータのなんらかのコピーをこのメソッドの外側で前進させないでください。

Return Value 戻り値

A UnicodeDecodingResult instance, representing the next Unicode scalar, an indication of an error, or an indication that the UTF sequence has been fully decoded. 次のユニコードスカラー、エラーの症状、またはUTFシーケンスが完全にデコードされた徴を表している、あるUnicodeDecodingResultインスタンス。

Discussion 解説

To decode a code unit sequence completely, call this method repeatedly until it returns UnicodeDecodingResult.emptyInput. Checking that the iterator was exhausted is not sufficient, because the decoder can store buffered data from the input iterator. あるコード単位のシーケンスを完全にデコードするには、このメソッドを繰り返し、それがUnicodeDecodingResult.emptyInputを返すまで呼び出してください。イテレータが使い尽くされてしまったことの確認は十分とは言えません、デコーダが入力イテレータからのバッファ済みデータを格納できるからです。

Because of buffering, it is impossible to find the corresponding position in the iterator for a given returned Unicode.Scalar or an error. バッファを行うことのため、ある指定の戻り値Unicode.Scalarやエラーに対して対応する位置をイテレータにおいて見つけることは不可能です。

The following example decodes the UTF-8 encoded bytes of a string into an array of Unicode.Scalar instances. This is a demonstration only—if you need the Unicode scalar representation of a string, use its unicodeScalars view. 以下の例は、ある文字列のUTF-8エンコードされたバイトを、Unicode.Scalarインスタンスの配列へとデコードします。これは単に1つの実演です—あなたがある文字列のユニコードスカラー表現を必要とするならば、それのunicodeScalarsビューを使ってください。


let str = "✨Unicode✨"
print(Array(str.utf8))
// Prints "[226, 156, 168, 85, 110, 105, 99, 111, 100, 101, 226, 156, 168]"


var bytesIterator = str.utf8.makeIterator()
var scalars: [Unicode.Scalar] = []
var utf8Decoder = UTF8()
Decode: while true {
    switch utf8Decoder.decode(&bytesIterator) {
    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}"]"

Relationships 関係

From Protocol 由来プロトコル