覆盖具有不同类型的超类属性

时间:2019-05-12 05:14:17

标签: ios swift syntax

以下代码引发错误

protocol WhatA: AnyObject {
    func doThat()
}

protocol WhatB: WhatA {
    func doThis()
}

class SomethingA {
    weak var delegate: WhatA?
}

class SomethingB: SomethingA {
    weak var delegate: WhatB?
}
  

类型为“ WhatB?”的属性“委托”不能使用覆盖属性   输入“ WhatA?”

UIKit在以下方面没有问题

open class UIScrollView : UIView, NSCoding, UIFocusItemScrollableContainer {

    weak open var delegate: UIScrollViewDelegate?

}

open class UITableView : UIScrollView, NSCoding, UIDataSourceTranslating {

    weak open var delegate: UITableViewDelegate?

}

为什么这在UIKit中起作用?对于this问题的公认答案表明,这是不可能的。

1 个答案:

答案 0 :(得分:8)

它与UIScrollViewUITableView及其委托一起使用的原因是它们是从原始的Objective-C标头生成的Swift接口。

Objective-C允许您执行此操作。虽然您无法创建直接执行此操作的Swift类,但是在这里看到的情况可能是从Objective-C桥接标头生成的Swift类接口。