我在超类中定义了一个变量,并尝试在子类中引用它,但是实例成员上出现错误,无法在类型上使用
class supClass: UIView { let defaultFontSize: CGFloat = 12.0 } class subClass: supClass { private func calcSomething(font: UIFont = UIFont.systemFontOfSize(defaultFontSize)) { //... Do something } }
它出什么问题了?非常感谢
在下面的示例中可以看到,方法参数的默认值是在类作用域而不是实例作用域上求值的:
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 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 } }
(请注意,是在同一类中还是在超类中定义该属性都与该问题无关。)