7
votes

SWIFT C NID * et NOID ** Pointeurs dans la dernière bêta (4)

Dans les bêtres précédents, j'ai pu passer un pointeur à quelque chose à faire quelque chose comme ça xxx

avec la fonction C comme ceci: xxx

Maintenant (à coup sûr en beta4, peut-être même en beta3) La syntaxe traduite de C à Swift a changé

avant, la fonction dosomique attendait un cmutablePoinger (qui a maintenant été retiré de Rapide) Maintenant, il s'attend à ce que: xxx

() est un typealias à vide

donc, la conversation syntaxiquement est plus claire. Cependant, maintenant, je ne peux pas comprendre comment prendre le vide ** pointeur de n'importe quel objet comme je faisais dans les bêtas précédents.

Toute suggestion?


1 commentaires

J'ai le même problème.


3 Réponses :


1
votes

Je ne sais pas si c'est la bonne réponse, j'espère que quelqu'un a une meilleure méthode pour le faire. Le principal problème était qu'il n'y a pas de conversion directe entre un objet SWIFT et un non-père annulé ( inégovié code>) Cependant, j'ai réussi à le faire passer via un CopaquePointer

    // since I can't go directly from NSMutableString to UnsafePointer<()> (which is UnsafePointer<Void>) i pass through a COpaquePointer
    var aString : NSMutableString = NSMutableString(string: "test") // create an NSString
    var anUnmanaged = Unmanaged.passUnretained(aString) // take an unmanaged pointer
    var opaque : COpaquePointer = anUnmanaged.toOpaque() // convert it to a COpaquePointer
    var anUnsafe : UnsafePointer<()> = UnsafePointer(opaque) // convert it to an UnsafePointer to Void ( () is a Typealias to Void) using the init(_ other: COpaquePointer) initializer

    doSomething(&anotherUnsafe)


0 commentaires

3
votes

Cela a fonctionné pour moi:

var str = "Hello, playground"
var p: UnsafePointer<Void> = unsafeAddressOf(str)


0 commentaires

1
votes

Pouvez-vous essayer ceci: xxx

puis: xxx


0 commentaires