2015-04-17 78 views
0

我有一个数据模型类层次结构,它的基类在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运行时可以看到identifiergroupsort setter和getter方法,我可以交换他们的实现。当从Obj-C上下文中访问属性时,我的自定义getters会被调用。不过,在Swift中,访问属性只是访问底层ivar。 (有趣的是,BaseModel类的@property被重定向,也可以在Swift上下文中使用,只是Swift类中的属性不起作用)。

如何获得Swift使用Objective- C获得者和制定者?我可以通过对所有模型类使用Objective-C来解决这个问题,但我真的很想在Swift中定义它们。

回答

4

好的,自我回答,因为我想出了它:它是足够的声明变量动态。

class ScreenItem : BaseModel { 
    dynamic var identifier : String? 
    dynamic var group : String? 
    dynamic var sort : String? 
} 

我以为从Obj-c-class继承就足够了,添加@objc指令也没有帮助。

+0

太棒了!绝妙的发现。即将放弃..... –