class ArcaneCardVC: UIViewController {
var currentCard: ArcaneCardView?
}
class PostVC: ArcaneCardVC {
override var currentCard: PostCard?
// <===== This is what I want to do but cant
}
class ArcaneCardView: UIView {
}
class PostCard: ArcaneCardView {
}
这是我得到的错误:
Cannot override mutable property 'currentCard' of type 'ArcaneCardView?' with covariant type 'PostCard?'
另一个解决方案是在我每次使用 currentCard 时在代码中明确地执行此操作:
var card = currentCard as! PostCard
最佳答案
当你覆盖一个变量时,你不能改变它的类型。为什么不?好吧,假设您能够做到这一点,那么可能会出现以下情况:
var A: PostVC = PostVC() // some initialization
var B: ArcaneCardVC = A // this is a valid state since `PostVC` is a subclass of `ArcaneCardVC`
B.currentCard
的类型应该是什么?嗯,这是一个复杂的问题。你可以回答它的类型应该是 PostCard
。好的,让我们将其他类添加到聚会中:
class OtherCard: ArcaneCardView {
}
class OtherVC: ArcaneCardVC {
override var currentCard: OtherCard?
}
现在考虑以下代码:
var A: ArcaneCardVC = PostVC()
var B: ArcaneCardVC = OtherVC()
A.currentCard = B.currentCard // something will crash here!!!
为避免这种行为,您不能在子类化时更改属性的类型。
关于ios - 如何覆盖父类(super class)的可变属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31598796/