當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Swift String init(unsafeUninitializedCapacity:initializingUTF8With:)用法及代碼示例


初始化器

init(unsafeUninitializedCapacity:initializingUTF8With:)

以 UTF-8 代碼單元創建具有指定容量的新字符串,然後使用覆蓋字符串未初始化內存的緩衝區調用給定閉包。

聲明

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

參數

capacity

為字符串分配的 UTF-8 代碼單元的內存數量(不包括空終止符)。

initializer

一個閉包,它接受一個覆蓋未初始化內存的緩衝區,並為capacity UTF-8 代碼單元提供空間,初始化該內存,並返回已初始化元素的數量。

詳述

閉包應返回已初始化代碼單元的數量,如果無法初始化緩衝區(例如,如果請求的容量太小),則返回 0。

此方法用 Unicode 替換字符 ("\u{FFFD}") 替換 ill-formed UTF-8 序列。這可能需要調整緩衝區的大小,使其超出其原始容量。

以下示例將此初始化程序與兩個不同 UInt8 數組的內容一起使用——第一個具有格式良好的 UTF-8 代碼單元序列,第二個在末尾具有 ill-formed 序列。


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 == ""

可用版本

iOS 14.0+, iPadOS 14.0+, macOS 11.0+, Mac Catalyst 14.0+, tvOS 14.0+, watchOS 7.0+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 String init(unsafeUninitializedCapacity:initializingUTF8With:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。