我有一个数据模型类层次结构,它的基类在Objective-C中实现并从NSObject继承,我重定向属性获取器和设置器以访问NSDictionary而不是存储器高德。我通过在运行时动态替换getter和setter实现来实现这一点。Swizzle swift属性getter/setter
在Objective-C世界中,我的自定义getter和setter被调用的地方可以正常工作。
虽然它不适用于Swift。当我在斯威夫特定义一个继承的模型类是这样的:
class ScreenItem : BaseModel {
var identifier : String?
var group : String?
var sort : String?
}
其中BaseModel是我的OBJ-C基类对象 - C运行时可以看到identifier
,group
和sort
setter和getter方法,我可以交换他们的实现。当从Obj-C上下文中访问属性时,我的自定义getters会被调用。不过,在Swift中,访问属性只是访问底层ivar。 (有趣的是,BaseModel类的@property被重定向,也可以在Swift上下文中使用,只是Swift类中的属性不起作用)。
如何获得Swift使用Objective- C获得者和制定者?我可以通过对所有模型类使用Objective-C来解决这个问题,但我真的很想在Swift中定义它们。
太棒了!绝妙的发现。即将放弃..... –