【发布时间】:2015-06-23 23:01:23
【问题描述】:
我有一个数据模型类层次结构,其基类在 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 中定义它们。
【问题讨论】:
-
你是如何在 Swift 中实现 var getter swizling 的?
标签: objective-c swift