由于 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
都会有无数重复值被 build 。我尝试将 StringObject
的 value
作为主键,但在创建 Person
对象时收到错误:
Can't set primary key property 'lastName' to existing value 'Doe'
这意味着 Realm 内部不会更新插入关系。
是否有更好的方法来存储选项?
最佳答案
我们实际上发布了 Realm 的测试版,它支持可选字符串和数据属性,并且希望很快会得到更广泛的发布!同时,您可以通过https://github.com/realm/realm-cocoa/issues/628#issuecomment-106952727试用测试版。 .
关于swift - 如何存储选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31432075/