Initializer

init(unsafeUninitializedCapacity:initializingUTF8With:)

Creates a new string with the specified capacity in UTF-8 code units, and then calls the given closure with a buffer covering the string’s uninitialized memory. 新しい文字列をUTF-8コード単位でのこの指定された収納能力で作成します、それから与えられたクロージャを、文字列のもつ初期化されないメモリを扱うバッファで呼び出します。

Declaration 宣言

init(unsafeUninitializedCapacity capacity: Int, initializingUTF8With initializer: (_ buffer: UnsafeMutableBufferPointer<UInt8>) throws -> Int) rethrows

Parameters パラメータ

capacity

The number of UTF-8 code units worth of memory to allocate for the string (excluding the null terminator). このUTF-8コード単位の数だけのメモリを文字列に対してアロケートすることになります(null終端子を除外して)。

initializer

A closure that accepts a buffer covering uninitialized memory with room for capacity UTF-8 code units, initializes that memory, and returns the number of initialized elements. あるクロージャ、それはcapacityのUTF-8単位に対する空き場所をもつ初期化されないメモリを扱うバッファを受け入れ、そのメモリを初期化し、そして初期化された要素の数を返します。

Discussion 解説

The closure should return the number of initialized code units, or 0 if it couldn’t initialize the buffer (for example if the requested capacity was too small). クロージャは、初期化されたコード単位の数を返すべきです、または0をもしそれがバッファを初期化することができなかったならば(例えば要請された収容能力が小さすぎたならば)。

This method replaces ill-formed UTF-8 sequences with the Unicode replacement character ("\u{FFFD}"). This may require resizing the buffer beyond its original capacity. このメソッドは、誤形式UTF-8シーケンスをユニコード代替文字("\u{FFFD}")で置き換えます。これは、バッファの大きさ変更を要請するかもしれません、それの元の収容能力を越えて。

The following examples use this initializer with the contents of two different UInt8 arrays—the first with a well-formed UTF-8 code unit sequence, and the second with an ill-formed sequence at the end. 以下の例は、このイニシャライザを2つの異なるUInt8配列の内容とともに使います — 整形式UTF-8コード単位シーケンスをもつ最初のもの、そして誤形式シーケンスをその終わりでもつ2番目もの。


let validUTF8: [UInt8] = [0x43, 0x61, 0x66, 0xC3, 0xA9]
let invalidUTF8: [UInt8] = [0x43, 0x61, 0x66, 0xC3]


let cafe1 = String(unsafeUninitializedCapacity: validUTF8.count) {
    _ = $0.initialize(from: validUTF8)
    return validUTF8.count
}
// cafe1 == "Café"


let cafe2 = String(unsafeUninitializedCapacity: invalidUTF8.count) {
    _ = $0.initialize(from: invalidUTF8)
    return invalidUTF8.count
}
// cafe2 == "Caf�"


let empty = String(unsafeUninitializedCapacity: 16) { _ in
    // Can't initialize the buffer (e.g. the capacity is too small).
    return 0
}
// empty == ""

See Also 参照

Creating a String 文字列の作成