swift 中的覆盖在扩展对象内部不起作用

override does not work inside extension object in swift

我们最近正尝试将基于 swift 的版本升级到 4.2。不幸的是,在升级时发现了很多问题。其中一个我们目前无法修复的是:

在以下代码中遇到错误:

Overriding non-@objc declarations from extensions is not supported

extension  MyHelpTableViewCell {
    override class var nib: UINib {
        return UINib(nibName: "MyHelpTableViewCell", bundle: nil)
    }

有经验的请帮我解决一下。非常感谢。

更新: 如果我像那样添加了@objc 和 dynamic,

class MyHelpTableViewCell: WMHelpTableViewCell {
}

extension MyHelpTableViewCell {
    @objc class dynamic var nib: UINib {
        return UINib(nibName: "MyHelpTableViewCell", bundle: nil)
    }

以下出现同样的错误,

Overriding non-@objc declarations from extensions is not supported

错误很明显:

您必须将覆盖方法从 extension 移动到 class


或者你必须在基础 class 中用 @objc@dynamic

标记声明
class BaseTableViewCell : UITableViewCell {
    @objc class dynamic var identifier : String { return "something" }
}

您无需扩展即可实现相同功能,如下所示:

class WMHelpTableViewCell {
    var identifier: String!
}

class MyHelpTableViewCell : WMHelpTableViewCell {
    override var identifier: String? {
        get {
            return self.identifier
        }
        set {
            self.identifier = newValue
        }
    }
}