2017-02-13 1 views
0

ich Wrapper bin Gebäude um GObject, und ich versuche, generische Zeiger für sieSyntaxfehler beim Erstellen unsichere allgemeine Zeiger (Generic Parameter ‚Zeigerende‘ konnte nicht geschlossen werden)

class Object<T> { 
    internal(set) var object = UnsafeMutablePointer(nil) 
} 

zu schaffen, aber ich bin immer diese Fehler

enter image description here

Der Typ sollte meiner Meinung nach gelöst werden, aber Compiler beschwert. Erstelle ich diesen Zeiger richtig? Ist das nur Compilerfehler oder habe ich das falsch gemacht?


bearbeiten habe ich versucht, jede Syntax, die mir in den Sinn kam, wie folgt aus:

class Object<T> { 
    internal(set) var object: UnsafeMutablePointer<T>? 

    init() { 
     object = UnsafeMutablePointer<T>(nil) 
    } 
} 

Nichts scheint zu funktionieren, weil Compiler irgendwie nicht den Typ

lösen können enter image description here

+0

Durch die Übergabe von 'nil' im Konstruktor kann die Struktur den Typ nicht ableiten. Geben Sie einfach 'UnsafeMutablePointer (nil)' ein. Dies sollte funktionieren –

+0

Bevor ich die Frage gestellt habe, habe ich das auch versucht. Es funktioniert auch nicht. –

+3

Nur * optionale * Zeiger können in Swift 3 "nil" sein, z. 'var Objekt: UnsafeMutablePointer ? = nil' - Aber es wäre interessant zu wissen, wie der Zeiger in Ihrem Code verwendet wird. –

Antwort

0

Die Typdeklaration in Ihrem zweiten Ansatz ist korrekt. Die Fehlermeldung "Mehrdeutige Verwendung" kommt, weil UnsafeMutablePointer zwei Initialisierungskandidaten hat, die eine nil akzeptieren: eine, die eine OpaquePointer? nimmt und eine, die eine UnsafeMutablePointer<T>? dauert.

In Ihrem Fall sollten Sie einfach nil zuweisen:

init() { 
    object = nil 
} 

Sie können auch dieses Recht in der Eigenschaftsdefinition tun, keine Notwendigkeit, es in init zu tun.

Verwandte Themen