2016-11-25 1 views
1
float *vertexBuffer = (float *)positionSource.data.bytes; 

'octets' est indisponible: l'utilisation withUnsafeBytes au lieuoctets dans swift3

, mais je ne sais pas comment l'utiliser

_ = positionSource?.data.withUnsafeBytes({ (<#UnsafePointer<ContentType>#>) -> ResultType in 

    }) 
+0

Quel type est 'positionSource' et quel est son contenu? – Jeremy

+0

'let positionSource = sphereNode.geometry? .getGeometrySources (pour: .vertex) [0]' – HaoDong

Répondre

0

withUnsafeBytes est une méthode générique, le ContentType est déduit du type de la fermeture. Avec

data.withUnsafeBytes { (vertexBuffer: UnsafePointer<Float>) in 
    // Use vertexBuffer ... 
} 

vous obtiendrez un UnsafePointer<Float> pointant vers les octets dans les données. Notez que ce pointeur ne doit pas être utilisé en dehors de la fermeture.

Vous pouvez également calculer un résultat et le renvoyer de la fermeture à l'appelant. Exemple:

let result = data.withUnsafeBytes { (vertexBuffer: UnsafePointer<Float>) -> Float in 
    let result = // ... compute result ... 
    return result 
} 
+0

Comment faire si je veux utiliser vertexBuffer en dehors de la fermeture? Je veux garder le code propre. – HaoDong

+0

@JohnAstion: 'Data' fournit un accès à ses octets uniquement dans un environnement de fermeture. Quelle est votre préoccupation de "propreté"? –

+0

Obtenez-le, merci! – HaoDong

1

Je pense que vous pouvez le faire comme ça.

let str = "hello" 
let strData = str.data(using: String.Encoding.utf8)! 
strData.withUnsafeBytes { (bytes: UnsafePointer<CChar>) -> Void in 
      print("\(bytes[1])") //exp: access as c string 
} 

Nous espérons vous aider!