我有一个数据模型类层次结构,其基类在Objective-C中实现并继承自NSObject,我在其中重定向属性getter和setter以访问NSDictionary而不是存储ivars。我通过在运行时动态替换getter和setter实现来做到这一点。
这在Objective-C世界中运行良好,我的自定义getter和setter被调用。
但是,它并不适用于Swift。当我在Swift中定义一个继承的模型类时:class ScreenItem : BaseModel {
var identifier : String?
var group : String?
var sort : String?
}
其中BaseModel是我的Obj-C基类,Obj-C运行时可以看到identifier
,group
和sort
setter和getter方法,我可以交换它们的实现。从Obj-C上下文中访问属性时,我的自定义getter会被调用。但是在Swift上下文中,访问该属性只是访问底层的ivar。 (有趣的是,BaseModel类上的@property因此被重定向,也适用于Swift上下文。它只是Swift类中不起作用的属性。)
如何让Swift使用Objective-C getter和setter?我可以通过在所有模型类中使用Objective-C来解决这个问题,但我真的很想在Swift中定义它们。
答案 0 :(得分:4)
好的,自我回答是因为我弄清楚了:它足以宣布变量是动态的。
class ScreenItem : BaseModel {
dynamic var identifier : String?
dynamic var group : String?
dynamic var sort : String?
}
我认为从Obj-c-class继承就足够了,添加@objc指令也无济于事。