Swift Instance成员不能用于类型

时间:2016-08-03 08:24:41

标签: swift

我在超类中定义了一个变量并试图在子类中引用它但是在实例成员上获取错误不能在类型

上使用
class supClass: UIView {
    let defaultFontSize: CGFloat = 12.0
}

class subClass: supClass {

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

它有什么问题?非常感谢你

2 个答案:

答案 0 :(得分:8)

在类范围上计算方法参数的默认值, 不是实例范围,如下例所示:

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,它将无法编译。

适用于您的情况,这意味着您必须制作所使用的属性 作为默认值static:

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

(请注意,无论该属性是否定义,都与此问题无关 同一个班级或超级班。)

答案 1 :(得分:6)

问题是你从来没有在任何地方初始化类,所以你不能访问不存在的对象的成员(如果我错了,请纠正我)。添加static可以解决问题:

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