首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift ObjectMapper不调用didSet

Swift ObjectMapper不调用didSet
EN

Stack Overflow用户
提问于 2017-08-24 12:49:30
回答 1查看 315关注 0票数 1

我使用ObjectMapper从一些JSON填充我的领域对象的属性。但是,每当didSet属性被Mapper更改时,Mapper似乎都不会被调用。

下面是我的类的精简版本(为了保持简洁,我刚刚删除了一些属性)

代码语言:javascript
复制
class ImageFile: Object, Mappable  {   

    dynamic var id = 0

    dynamic var filename = ""

    dynamic var remotepath = "" {

        didSet {

            self.filename = self.remotepath.isEmpty ? "x" : "z"

        }

    }


    required convenience init?(map: Map) {

        self.init()

    }    

    override static func primaryKey() -> String? {

        return "id"

    }



    func mapping(map: Map) {

        remotepath <- map[“path"]

    }     

}

我是这样说的:

代码语言:javascript
复制
let file = ImageFile()
file.id = json["fileId"].int

// Map the properties
file.mapping(map: Map(mappingType: .fromJSON, JSON: json.dictionaryObject ?? [:]))

我尝试在didSet中放置一个断点,以及一个打印,以查看它是否正在运行,而不是/但如果我检查数据库,我确实在远程路径属性中看到了正确的值,因此它肯定是被填充的。

我知道didSet不会在init期间触发,但是我会在init之后映射,所以它应该会触发吗?我检查了ObjectMapper上的github问题,人们在ObjectMapper上使用了didSet,所以我显然缺少一些东西.

任何帮助都是非常感谢的:)

备注:

  • 这个对象的所有属性都会被填充,除了filename属性,该属性应该在didSet回调中设置。
  • 我之所以选择不映射ID,只是忽略它,只是为了清晰起见。
  • 我用"x“和"z”作为文件名,只是为了测试它是否被触发,忽略它们没有意义的事实,这不是问题所在。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-24 13:10:34

属性观察者不工作在Realm对象上。这是已知的领域限制,因为对象存在于objects运行时(因此是动态修饰符)。有关详细信息,请参阅 GitHub问题。您可以使用内置在通知中的Realm作为属性观察者的解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45862116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档