2016-08-03 1 views
4

に使用することはできません私は、スーパークラスの変数を定義し、サブクラスでそれを参照してくださいしようとしているが、インスタンスのメンバーにエラーを取得し、それと間違って何種類スウィフトインスタンスメンバーがタイプ

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

class subClass: supClass { 

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

に使用することはできませんか?ありがとうございました

答えて

3

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 

、それをstaticを追加するトリックを行いますstatic var fooがなければコンパイルできません。

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 
    } 
} 

(プロパティが定義されているかどうか、この問題とは無関係であることに注意してください:あなたの場合に適用

それはあなたが静的なデフォルト値として を使用されているプロパティをしなければならないことを意味し と同じクラスまたはスーパークラスです)

+0

ありがとうございましたMartin R – Kevin

2

問題は、クラスをどこにも初期化していないため、既存のオブジェクト以外のメンバーにアクセスできないということです(私が間違っている場合は修正してください)。一つは、以下の例でわかるように、メソッドパラメータのデフォルト値はクラススコープ、 ないインスタンスのスコープで評価さ

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

ありがとうございましたArmin – Kevin