覆盖在swift中的扩展对象内不起作用
Posted
技术标签:
【中文标题】覆盖在swift中的扩展对象内不起作用【英文标题】:override does not work inside extension object in swift 【发布时间】:2019-01-09 09:31:57 【问题描述】:我们最近正在尝试将我们基于 swift 的版本升级到 4.2。不幸的是,在升级时发现了很多问题。我们目前无法修复的其中之一是:
在以下代码中遇到了该错误:
不支持从扩展覆盖非@objc 声明
extension MyHelpTableViewCell
override class var nib: UINib
return UINib(nibName: "MyHelpTableViewCell", bundle: nil)
如果您有经验,请帮助我如何解决该问题。非常感谢。
更新: 如果我添加了@objc 和这样的动态,
class MyHelpTableViewCell: WMHelpTableViewCell
extension MyHelpTableViewCell
@objc class dynamic var nib: UINib
return UINib(nibName: "MyHelpTableViewCell", bundle: nil)
以下有同样的错误,
不支持从扩展覆盖非@objc 声明
【问题讨论】:
【参考方案1】:错误很明显:
您必须将覆盖方法从extension
移动到class
或者你必须用@objc
和@dynamic
标记基类中的声明
class BaseTableViewCell : UITableViewCell
@objc class dynamic var identifier : String return "something"
【讨论】:
我已将我的问题更新为添加您上面提到的代码 不行,@objc ... dynamic
必须添加到 base 类的声明中
我基于WMHelpTableViewCell
类创建了另一个MyHelpTableViewCell
,它有自己的nib
类。基类WMHelpTableViewCell
有自己的nib
,称为WMHelpTableViewCell
,子类MyHelpTableViewCell
有自己的nib
,称为MyHelpTableViewCell
。这就是为什么不能将它们移动到基于类的原因。
只有这两个选项可以覆盖一个属性。也许你可以改用一种方法。
我再次更新了我的问题。请你看一下好吗?【参考方案2】:
你可以在没有扩展的情况下达到同样的效果:
class WMHelpTableViewCell
var identifier: String!
class MyHelpTableViewCell : WMHelpTableViewCell
override var identifier: String?
get
return self.identifier
set
self.identifier = newValue
【讨论】:
以上是关于覆盖在swift中的扩展对象内不起作用的主要内容,如果未能解决你的问题,请参考以下文章
swift isUserInteractionEnabled = false 在 UITapGestureRecognizer 内不起作用