konvertiert werden Ich mache eine Menge Arbeit mit [Uint8]
Arrays. Aber ich muss diese oft als NSData
Objekte umwandeln, um mit iOS-Frameworks wie CoreBluetooth
zu interagieren. Also habe ich eine Menge Code haben, der etwas aussehen könnte:Swift: Wert des Typs 'Self' kann nicht in den erwarteten Argumenttyp 'UnsafePointer <Void>'
var input:[UInt8] = [0x60, 0x0D, 0xF0, 0x0D]
let data = NSData(bytes: input, length: input.count)
müde zu müssen, fügen Sie diese zusätzlichen let data = ...
Linie, ich dachte, ich würde nur diese Arrays mit einer berechneten Eigenschaft erweitern die Arbeit zu tun. Dann könnte ich einfach Dinge tun wie:
aBluetoothPeriperal.write(myBytes.nsdata, ...)
So ist es im Grunde nur Erweiterungszucker. Ich kann nicht Array erweitern, aber ich kann ein Protokoll erweitern:
extension SequenceType where Generator.Element == UInt8 {
var nsdata:NSData {
return NSData(bytes: self, length: self.count)
}
}
, die einen Fehler erzeugt, der wie folgt aussieht:
Playground execution failed: MyPlayground.playground:3:24: error: cannot convert value of type 'Self' to expected argument type 'UnsafePointer<Void>' (aka 'UnsafePointer<()>')
return NSData(bytes: self, length: self.count)
^~~~
Leider je mehr ich Swift verwenden - und ich mag Einige Dinge über Swift - je mehr erinnere ich mich an meine negativen Erfahrungen mit dem Versuch, Unmengen von nicht hilfreichem Compiler-Output zu verstehen, als ich vor vielen Jahren mit C++ und vielen Generika ausprobiert habe. Also bitte, Obi Wan, hilf mir, das Licht hier zu sehen!
Wie planen Sie eine solche Nebenstelle anzurufen? Können Sie hinzufügen, wie der aufrufende Code aussehen würde? – ryantxr