2017-07-19 119 views
0

當我寫的音頻緩衝數據multipeer連接輸出流我得到了錯誤不能調用初始化類型UnsafePointer <_>與類型(UnsafeMutableRawPointer)的參數列表

不能調用UnsafePointer <初始化類型_ >用型的(UnsafeMutableRawPointer)參數 列表

我發現很多的解決方案,但這種方法不適合我很有幫助。

我的代碼是:提前

func send(_ buffer: AudioBuffer) { 
     print(buffer.mData!) 
     print(buffer.mDataByteSize) 

     outputStreme?.write(UnsafePointer(buffer.mData), maxLength: buffer.mDataByteSize) 
    } 

enter image description here

謝謝.. :)

+0

你需要,而不是NSData的斯威夫特處理數據的3個 – KKRocks

+0

@KKRocks我這是不安全的可變原始指針,但我想不安全的指針,因爲它在輸出參數STRAM謝謝 –

回答

2

請查看官方參考時某種規格的變化已與您的代碼的影響。在你的情況AudioBuffer.mDataUnsafeMutableRawPointer?類型,你需要將它傳遞給UnsafePointer<UInt8>類型的第一個參數OutputStream.write(_:maxLength:)

UnsafeMutableRawPointer

你可以找到這個方法,它返回UnsafeMutablePointer<T>

func assumingMemoryBound<T>(to: T.Type)

約束的概念是有點混亂,但似乎你可以使用它的指針類型轉換:

outputStreme?.write(buffer.mData!.assumingMemoryBound(to: UInt8.self), maxLength: Int(buffer.mDataByteSize)) 

(Assumi NG強制展開!足夠安全由您print(buffer.mData!)的建議。)

內存勢必 -ness不能很好地爲其返回指針大多數API定義,並且有沒有影響,因爲現在。還有另一種類型轉換方法func bindMemory<T>(to: T.Type, capacity: Int),兩者都可以毫無問題地工作(同樣,目前)。

+0

使用你先生......你是天才 –

1

試試這個:

withUnsafePointer(to: &data) {rawUuidPtr in //<- `rawUuidPtr` is of type `UnsafePointer<uuid_t>`. 
      let bytes = UnsafeRawPointer(rawUuidPtr).assumingMemoryBound(to: UInt8.self) 
      outputStream.write(bytes, maxLength: 4) 
     } 
相關問題