Skip to content

Make String(unsafeUninitializedCapacity:initializingUTF8With:) public #30106

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 3, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 17 additions & 3 deletions stdlib/public/core/String.swift
Original file line number Diff line number Diff line change
Expand Up @@ -445,22 +445,22 @@ extension String {
/// sequences and the second with an ill-formed sequence at the end.
///
/// let validUTF8: [UInt8] = [67, 97, 102, -61, -87, 0]
/// let s = String(uninitializedCapacity: validUTF8.count,
/// let s = String(unsafeUninitializedCapacity: validUTF8.count,
/// initializingUTF8With: { ptr in
/// ptr.initializeFrom(validUTF8)
/// return validUTF8.count
/// })
/// // Prints "Café"
///
/// let invalidUTF8: [UInt8] = [67, 97, 102, -61, 0]
/// let s = String(uninitializedCapacity: invalidUTF8.count,
/// let s = String(unsafeUninitializedCapacity: invalidUTF8.count,
/// initializingUTF8With: { ptr in
/// ptr.initializeFrom(invalidUTF8)
/// return invalidUTF8.count
/// })
/// // Prints "Caf�"
///
/// let s = String(uninitializedCapacity: invalidUTF8.count,
/// let s = String(unsafeUninitializedCapacity: invalidUTF8.count,
/// initializingUTF8With: { ptr in
/// ptr.initializeFrom(invalidUTF8)
/// return 0
Expand All @@ -475,6 +475,20 @@ extension String {
/// - Parameters:
/// - buffer: A buffer covering uninitialized memory with room for the
/// specified number of UTF-8 code units.
@inline(__always)
@available(macOS 9999, iOS 9999, tvOS 9999, watchOS 9999, *)
public init(
Copy link
Member

@milseman milseman Feb 28, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From the proposal:

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

unsafeUninitializedCapacity capacity: Int,
initializingUTF8With initializer: (
_ buffer: UnsafeMutableBufferPointer<UInt8>
) throws -> Int
) rethrows {
self = try String(
uninitializedCapacity: capacity,
initializingUTF8With: initializer
)
}

@inline(__always)
internal init(
uninitializedCapacity capacity: Int,
Expand Down