很容易在Swift中覆盖一个方法:
class A {
func innerValue() -> Int { return 5 }
func getInnerValue() -> Int { return innerValue() }
}
class B: A {
override func innerValue() -> Int { return 8 }
}
B().getInnerValue() //returns 8
但是当我将innerValue()
声明为 static (使用class
关键字)时,我不知道如何做同样的事情:
class A {
class func innerValue() -> Int { return 5 }
func getInnerValue() -> Int {
return A.innerValue() //ok for compiler but returns 5 instead of 8
return self.innerValue() //error: 'A' doesn't have a member named 'innerValue'
return innerValue() //error: Use of unresolved identifier 'innerValue'
}
}
class B: A {
override class func innerValue() -> Int { return 8 }
}
B().getInnerValue()
Swift可以吗?
答案 0 :(得分:8)
return A.innerValue() //ok for compiler but returns 5 instead of 8
从您的评论中,听起来您想要做的是以多态方式引用当前实例的类。如果这是您想要的,请不要将innerValue()
消息发送给A
;这仅表示A
。并且不要将它发送到self
,因为你写这个的方式,getInnerValue
是一个实例方法,而你想要调用的是一个类方法。将其发送到self.dynamicType
,即当前实例的类。