Swift 2.0
ดูเหมือนว่า Swift 2.0 ได้เปิดตัวString(data:encoding:)
ส่วนขยาย String อย่างแท้จริงเมื่อคุณนำเข้าFoundation
เมื่อคุณนำเข้า ฉันไม่พบสถานที่ใด ๆ ที่มีการบันทึกไว้แปลกพอ
(ก่อน Swift 2.0) ส่วนขยายที่มีน้ำหนักเบา
นี่คือส่วนขยายเล็ก ๆ ที่คัดลอกได้โดยไม่ต้องใช้NSString
ลองตัดคนกลาง
import Foundation
extension NSData
{
var byteBuffer : UnsafeBufferPointer<UInt8> { get { return UnsafeBufferPointer<UInt8>(start: UnsafeMutablePointer<UInt8>(self.bytes), count: self.length) }}
}
extension String
{
init?(data : NSData, encoding : NSStringEncoding)
{
self.init(bytes: data.byteBuffer, encoding: encoding)
}
}
// Playground test
let original = "Nymphs blitz quick vex dwarf jog"
let encoding = NSASCIIStringEncoding
if let data = original.dataUsingEncoding(encoding)
{
String(data: data, encoding: encoding)
}
นอกจากนี้ยังให้คุณเข้าถึงdata.byteBuffer
ซึ่งเป็นชนิดลำดับดังนั้นการดำเนินการที่ยอดเยี่ยมทั้งหมดที่คุณสามารถทำได้ด้วยลำดับยังใช้ได้เช่นเดียวกับการทำreduce { $0 &+ $1 }
เช็คซัม
หมายเหตุ
ในการแก้ไขก่อนหน้าของฉันฉันใช้วิธีนี้:
var buffer = Array<UInt8>(count: data.length, repeatedValue: 0x00)
data.getBytes(&buffer, length: data.length)
self.init(bytes: buffer, encoding: encoding)
ปัญหาด้วยวิธีนี้คือการที่ฉันสร้างสำเนาของข้อมูลลงในแถวใหม่จึงฉันทำซ้ำจำนวนไบต์ (เฉพาะ: encoding size * data.length
)