Skip to content

Commit b3e1bd0

Browse files
authored
[string] Wean off of non-String-API. (#1476)
[string] Wean off of non-API on String. String._fromCodeUnits is about to disappear; use already existing String.init calls instead.
1 parent 778c07b commit b3e1bd0

File tree

3 files changed

+13
-26
lines changed

3 files changed

+13
-26
lines changed

Foundation/NSString.swift

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ open class NSString : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSC
273273
}
274274

275275
public init(characters: UnsafePointer<unichar>, length: Int) {
276-
_storage = String._fromWellFormedCodeUnitSequence(UTF16.self, input: UnsafeBufferPointer(start: characters, count: length))
276+
_storage = String(decoding: UnsafeBufferPointer(start: characters, count: length), as: UTF16.self)
277277
}
278278

279279
public required convenience init(unicodeScalarLiteral value: StaticString) {
@@ -1166,16 +1166,8 @@ extension NSString {
11661166
}
11671167

11681168
public convenience init?(utf8String nullTerminatedCString: UnsafePointer<Int8>) {
1169-
let count = Int(strlen(nullTerminatedCString))
1170-
if let str = nullTerminatedCString.withMemoryRebound(to: UInt8.self, capacity: count, {
1171-
let buffer = UnsafeBufferPointer<UInt8>(start: $0, count: count)
1172-
return String._fromCodeUnitSequence(UTF8.self, input: buffer)
1173-
}) as String?
1174-
{
1175-
self.init(str)
1176-
} else {
1177-
return nil
1178-
}
1169+
guard let str = String(validatingUTF8: nullTerminatedCString) else { return nil }
1170+
self.init(str)
11791171
}
11801172

11811173
public convenience init(format: String, arguments argList: CVaListPointer) {
@@ -1357,23 +1349,19 @@ open class NSMutableString : NSString {
13571349
}
13581350

13591351
public required init(stringLiteral value: StaticString) {
1360-
if value.hasPointerRepresentation {
1361-
super.init(String._fromWellFormedCodeUnitSequence(UTF8.self, input: UnsafeBufferPointer(start: value.utf8Start, count: Int(value.utf8CodeUnitCount))))
1362-
} else {
1363-
var uintValue = value.unicodeScalar.value
1364-
super.init(String._fromWellFormedCodeUnitSequence(UTF32.self, input: UnsafeBufferPointer(start: &uintValue, count: 1)))
1365-
}
1352+
super.init(value.description)
13661353
}
13671354

13681355
public required init(string aString: String) {
13691356
super.init(aString)
13701357
}
13711358

13721359
internal func appendCharacters(_ characters: UnsafePointer<unichar>, length: Int) {
1360+
let str = String(decoding: UnsafeBufferPointer(start: characters, count: length), as: UTF16.self)
13731361
if type(of: self) == NSMutableString.self {
1374-
_storage.append(String._fromWellFormedCodeUnitSequence(UTF16.self, input: UnsafeBufferPointer(start: characters, count: length)))
1362+
_storage.append(str)
13751363
} else {
1376-
replaceCharacters(in: NSRange(location: self.length, length: 0), with: String._fromWellFormedCodeUnitSequence(UTF16.self, input: UnsafeBufferPointer(start: characters, count: length)))
1364+
replaceCharacters(in: NSRange(location: self.length, length: 0), with: str)
13771365
}
13781366
}
13791367

Foundation/String.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,21 @@ extension String : _ObjectTypeBridgeable {
3636
let buffer = UnsafeMutablePointer<UniChar>.allocate(capacity: length)
3737
CFStringGetCharacters(cf, CFRangeMake(0, length), buffer)
3838

39-
let str = String._fromCodeUnitSequence(UTF16.self, input: UnsafeBufferPointer(start: buffer, count: length))
39+
let str = String(decoding: UnsafeBufferPointer(start: buffer, count: length), as: UTF16.self)
4040
buffer.deinitialize(count: length)
4141
buffer.deallocate()
4242
result = str
4343
}
4444
} else if type(of: source) == _NSCFConstantString.self {
4545
let conststr = unsafeDowncast(source, to: _NSCFConstantString.self)
46-
let str = String._fromCodeUnitSequence(UTF8.self, input: UnsafeBufferPointer(start: conststr._ptr, count: Int(conststr._length)))
46+
let str = String(decoding: UnsafeBufferPointer(start: conststr._ptr, count: Int(conststr._length)), as: UTF8.self)
4747
result = str
4848
} else {
4949
let len = source.length
5050
var characters = [unichar](repeating: 0, count: len)
5151
result = characters.withUnsafeMutableBufferPointer() { (buffer: inout UnsafeMutableBufferPointer<unichar>) -> String? in
5252
source.getCharacters(buffer.baseAddress!, range: NSRange(location: 0, length: len))
53-
return String._fromCodeUnitSequence(UTF16.self, input: buffer)
53+
return String(decoding: buffer, as: UTF16.self)
5454
}
5555
}
5656
return result != nil

Foundation/XMLParser.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -296,8 +296,7 @@ internal func _NSXMLParserStartElementNs(_ ctx: _CFXMLInterface, localname: Unsa
296296
if numBytesWithoutTerminator > 0 {
297297
let buffer = UnsafeBufferPointer(start: value,
298298
count: numBytesWithoutTerminator)
299-
attributeValue = String._fromCodeUnitSequence(UTF8.self,
300-
input: buffer)!
299+
attributeValue = String(decoding: buffer, as: UTF8.self)
301300
}
302301
attrDict[attributeQName] = attributeValue
303302
}
@@ -352,8 +351,8 @@ internal func _NSXMLParserCharacters(_ ctx: _CFXMLInterface, ch: UnsafePointer<U
352351
_CFXMLInterfaceResetRecursiveState(context)
353352
} else {
354353
if let delegate = parser.delegate {
355-
let str = String._fromCodeUnitSequence(UTF8.self, input: UnsafeBufferPointer(start: ch, count: Int(len)))
356-
delegate.parser(parser, foundCharacters: str!)
354+
let str = String(decoding: UnsafeBufferPointer(start: ch, count: Int(len)), as: UTF8.self)
355+
delegate.parser(parser, foundCharacters: str)
357356
}
358357
}
359358
}

0 commit comments

Comments
 (0)