2016-08-03 6 views
4

I definiert eine Variable in Superklasse und versuchen, es in der Unterklasse zu beziehen, sondern auf Instanz Mitglied bekommen Fehler kann nicht auf Typ verwendet werdenSwift Instanz Mitglied kann nicht auf Art verwendet werden

class supClass: UIView { 
    let defaultFontSize: CGFloat = 12.0 
} 

class subClass: supClass { 

    private func calcSomething(font: UIFont = UIFont.systemFontOfSize(defaultFontSize)) { 
     //... Do something 
    } 
} 

Was ist falsch daran? Vielen Dank

Antwort

3

Der Standardwert eines Methodenparameter auf Klassenbereich ausgewertet wird, nicht Instanzbereich, wie man im folgenden Beispiel sehen:

class MyClass { 

    static var foo = "static foo" 
    var foo = "instance foo" 

    func calcSomething(x: String = foo) { 
     print("x =", x) 
    } 
} 

let obj = MyClass() 
obj.calcSomething() // x = static foo 

und würde ohne die static var foo nicht kompilieren.

Angewandt auf Ihren Fall bedeutet dies, dass Sie die Eigenschaft machen haben, die statischen als Standardwert verwendet wird:

class supClass: UIView { 
    static let defaultFontSize: CGFloat = 12.0 // <--- add `static` here 
} 

class subClass: supClass { 

    private func calcSomething(font: UIFont = UIFont.systemFontOfSize(defaultFontSize)) { 
     //... Do something 
    } 
} 

(Beachten Sie, dass es für dieses Problem keine Rolle spielt, ob die Eigenschaft in der definiert ist, gleiche Klasse oder in einer Superklasse.)

+0

Vielen Dank Martin R – Kevin

2

Problem ist, dass Sie nie Klasse irgendwo initialisiert, so dass Sie nicht auf die Mitglieder eines nicht vorhandenen Objekts zugreifen können (korrigieren Sie mich, wenn ich falsch liege). Hinzufügen static wird der Trick:

class supClass: UIView { 
    static let defaultFontSize: CGFloat = 12.0 
} 
+0

Vielen Dank Armin – Kevin

Verwandte Themen