2017-07-19 4 views
0

Quand j'écris le flux de sortie en matière de connectivité multipeer à partir des données de la mémoire tampon audio, je suis l'erreurne peut invoquer initialiseur pour le type UnsafePointer <_> avec une liste de type d'argument (UnsafeMutableRawPointer)

peut invoquer initialiseur pour le type UnsafePointer < _ > avec un argument liste de type (UnsafeMutableRawPointer)

Je trouve les nombreuses solutions, mais cette solution ne utile pour moi.

Mon code est:

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

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

enter image description here

Merci à l'avance .. :)

+0

vous devez travailler avec des données plutôt que NSData à Swift 3 – KKRocks

+0

@KKRocks I ceci est pointeur brut mutable dangereux, mais je veux pointer dangereux, car il utilise la production argument stram –

Répondre

2

S'il vous plaît vérifier la référence officielle quand une sorte de changements de spécifications a affecté votre code. Dans votre cas AudioBuffer.mData est de type UnsafeMutableRawPointer?, et vous devez le passer au premier argument de OutputStream.write(_:maxLength:) de type UnsafePointer<UInt8>.

UnsafeMutableRawPointer

Vous pouvez trouver cette méthode qui retourne UnsafeMutablePointer<T>:

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

Le concept de lié est un peu confus, mais il semble que vous pouvez l'utiliser pour la conversion de type pointeur:

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

(Assumi) ng forcé Dépaquetage ! est assez sûr comme suggéré par votre print(buffer.mData!).)

mémoire lié ness est pas bien définie pour la plupart des API qui renvoient des pointeurs, et n'a pas d'effet que pour l'instant. Il existe une autre méthode de conversion de type func bindMemory<T>(to: T.Type, capacity: Int), et les deux fonctionnent sans problèmes (encore une fois, pour l'instant).

+0

Remercier vous monsieur ... Vous êtes le génie –

1

Essayez ceci:

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) 
     }