我使用[Uint8]
數組做了一堆工作。但我經常不得不將這些重寫爲NSData
對象,以便與iOS框架(如CoreBluetooth
)進行交互。所以我有很多的代碼可能看起來像:Swift:無法將類型'Self'的值轉換爲期望的參數類型'UnsafePointer <Void>'
var input:[UInt8] = [0x60, 0x0D, 0xF0, 0x0D]
let data = NSData(bytes: input, length: input.count)
由於勞累不必插入此額外let data = ...
行的,我以爲我會只是延長這些陣列與計算物業辦的工作。然後我可以做這樣的事情:
aBluetoothPeriperal.write(myBytes.nsdata, ...)
所以它基本上只是延長糖。我無法擴展陣列,但我可以擴展協議:
extension SequenceType where Generator.Element == UInt8 {
var nsdata:NSData {
return NSData(bytes: self, length: self.count)
}
}
其產生看起來像一個錯誤:
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)
^~~~
可悲的是,我越用斯威夫特 - 我真的很喜歡關於Swift的一些事情 - 我想起了越來越多的關於嘗試理解大量無用的編譯器輸出的負面經歷,這些經驗在我多年前嘗試使用C++和許多泛型和東西時遇到。所以請奧比萬,幫我看看這裏的燈光!
你打算如何打電話給這樣的擴展?你可以添加調用代碼的樣子嗎? – ryantxr