Swift 2.0
Es scheint, dass Swift 2.0 die String(data:encoding:)
Erweiterung als String beim Importieren tatsächlich eingeführt hat Foundation
. Ich habe seltsamerweise keinen Ort gefunden, an dem dies dokumentiert ist.
(vor Swift 2.0) Leichte Erweiterung
Hier ist eine kopierbare kleine Erweiterung, die nicht verwendet werden NSString
kann. Lassen Sie uns den Mittelsmann ausschneiden.
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)
}
Auf diese Weise erhalten Sie auch Zugriff auf data.byteBuffer
einen Sequenztyp, sodass alle coolen Operationen, die Sie mit Sequenzen ausführen können, auch funktionieren, z. B. reduce { $0 &+ $1 }
für eine Prüfsumme.
Anmerkungen
In meiner vorherigen Bearbeitung habe ich diese Methode verwendet:
var buffer = Array<UInt8>(count: data.length, repeatedValue: 0x00)
data.getBytes(&buffer, length: data.length)
self.init(bytes: buffer, encoding: encoding)
Das Problem bei diesem Ansatz ist , dass ich eine Kopie der Informationen in ein neues Array bin zu schaffen, damit ich die Menge an Bytes zu duplizieren (speziell: encoding size * data.length
)