2017-07-19 51 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) 
     } 
相关问题