Swift 2.0
Görünüşe göre Swift 2.0, String(data:encoding:)
içe aktarırken aslında bir String uzantısı olarak tanıttı Foundation
. Bunun belgelendiği bir yer bulamadım, garip bir şekilde.
(Swift 2.0 öncesi) Hafif uzantı
İşte kullanmadan kopyalanabilir küçük bir uzantı NSString
, orta adamı keselim.
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)
}
Bu aynı zamanda data.byteBuffer
bir dizi türü olan erişim sağlar , bu nedenle dizilerle yapabileceğiniz tüm bu harika işlemler de reduce { $0 &+ $1 }
bir sağlama toplamı için a yapmak gibi çalışır .
notlar
Önceki düzenlememde bu yöntemi kullandım:
var buffer = Array<UInt8>(count: data.length, repeatedValue: 0x00)
data.getBytes(&buffer, length: data.length)
self.init(bytes: buffer, encoding: encoding)
Bu yaklaşımdaki sorun, ben böylece, bayt miktarını çoğaltarak ediyorum, yeni bir diziye bilgilerin bir kopyasını oluşturarak olmam (özellikle: encoding size * data.length
)