【问题标题】:How to store optionals如何存储选项
【发布时间】:2015-07-15 13:40:18
【问题描述】:

由于 Realm 不支持不是 Object 子类的可选项,我正在尝试将字符串包装到 StringObject

final class StringObject: Object {
    dynamic var value: String = ""

    convenience init?(_ value: String?) {
        self.init()

        if let value = value {
            self.value = value
        } else {
            return nil
        }
    }
}

并像这样使用它:

final class Person: Object {
    dynamic var firstName: String = ""
    dynamic var lastName: StringObject? // can be optional
}

但是这种解决方案有一个讨厌的副作用:由于StringOptional 的值将存储在数据库中自己的表中,因此每次创建StringObject 时都会有无数重复值。我尝试将StringObjectvalue 设为主键,但在创建Person 对象时收到错误消息:

无法将主键属性“lastName”设置为现有值“Doe”

这意味着 Realm 在内部不会更新关系。

有没有更好的方法来存储选项?

【问题讨论】:

    标签: swift realm


    【解决方案1】:

    我们实际上发布了一个支持可选字符串和数据属性的 Realm 测试版,并且希望它很快会更广泛地发布!同时,您可以在https://github.com/realm/realm-cocoa/issues/628#issuecomment-106952727 试用测试版。

    【讨论】:

    • 我看到了,我真的很期待完整的可选支持,但我的问题巧合地以String 为例,它也可能是一种类型,其可选选项尚不支持。那么有什么办法可以通过最新的稳定版本来解决这个限制吗? Object wrapper 似乎是个好主意,但一张满是 StringObject 重复的表感觉很不对劲。就像我在问题中提到的那样,主键并没有真正帮助,因为关系没有被更新。谢谢,@segiddins!
    • 你可以手动破坏关系,这就是我想到的所有内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多