2016-08-03 42 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 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

非常感谢你马丁R – Kevin

2

问题是,你永远不会初始化类的任意位置,所以你不能访问不存在的对象的成员(纠正我,如果我错了)。添加static将这样的伎俩:

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

非常感谢你阿明 – Kevin