一尘不染

Swift实例成员不能在类型上使用

swift

我在超类中定义了一个变量,并尝试在子类中引用它,但是实例成员上出现错误,无法在类型上使用

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

class subClass: supClass {

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

它出什么问题了?非常感谢


阅读 252

收藏
2020-07-07

共1个答案

一尘不染

在下面的示例中可以看到,方法参数的默认值是在类作用域而不是实例作用域上求值的:

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

(请注意,是在同一类中还是在超类中定义该属性都与该问题无关。)

2020-07-07