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
}
}
}
我们最近正尝试将基于 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
}
}
}