当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。