2016-03-25 17 views
2

gelten folgende Voraussetzungen:Funktion im Initialisierer verwenden - schnell?

class A { 
    let x : Int 
    init() { 
     self.x = assign(1) 
    } 
    func assign(y : Int) -> Int { 
     return y 
    } 
} 

Dies erzeugt einen Fehler.

Hier ist meine Frage: Gibt es eine Möglichkeit, Funktionen innerhalb der Klasseninitialisierung aufzurufen?

EDIT: Fehlermeldung hinzugefügt:

Verwendung von ‚Selbst‘ in Methodenaufruf ‚assign‘ vor allen gespeicherten Eigenschaften

+0

Was ist die Ausnahme/Fehler, die Sie bekommen? Wäre hilfreich, um das tatsächliche Ergebnis zu sehen, das Sie erhalten – konkked

+0

Es gibt mehrere Lösungen, aber ein echter Anwendungsfall würde helfen. – Sulthan

Antwort

1

initialisiert ich glaube, es nicht die beste Lösung ist, aber es immer noch funktioniert.

class A { 
     var variable : Int 

     init() { 

      self.variable = A.assign(1) 

     } 

     private class func assign(y : Int) -> Int { 
      return y 
     } 
    } 
+0

Es funktioniert, danke. Aus Neugier, warum funktioniert das, während die vorherige Methode nicht funktioniert hat? –

+0

es ist eine Klassenfunktion und diese Art von Funktion brauchen keine Initialisierung des Objekts oder @Sultan könnten Sie tief erklären –

0

Sie Somethings wie verwenden:

class A { 
    var x : Int! 
    init() { 
     x = assign(1) 
    } 
    func assign(y : Int) -> Int { 
     return y 
    } 
} 

Der Nachteil dieses Ansatzes ist, dass Sie einen Laufzeitfehler erhalten, wenn Sie x zugreifen und es ist nicht initialisiert. Check out this Antwort.

+0

Was erlaubt x! arbeiten, während x nicht? –

+0

Es funktioniert, weil jetzt 'x' optional ist, so dass der Fehler nicht mehr zutrifft. Jetzt verwenden Sie nicht "self", bevor alle gespeicherten Eigenschaften initialisiert werden, weil Sie solche Eigenschaften nicht mehr haben, jetzt sind sie Optionals. – Jelly

1

Sie können keine Instanz-Methoden aufrufen, bis die Instanz initialisiert wird (vor init getan wird), aber Sie können Modul-Level-Funktionen und type methods definiert mit dem class oder static Schlüsselwort verwenden.

func compute(y: Int) -> Int { 
    return y 
} 

class A { 
    let x: Int 

    static func assign(y: Int) -> Int { 
    return y 
    } 

    init() { 
    x = A.assign(3) + compute(4) 
    } 
} 
Verwandte Themen