【问题标题】:Swizzle swift property getter/setterSwizzle 快速属性获取器/设置器
【发布时间】: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 运行时可以看到 identifiergroupsort 的 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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-07-24
    • 1970-01-01
    • 2014-03-11
    • 2012-12-29
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多