繁体   English   中英

Realm swift中的一对一关系

[英]One-to-one relationship in Realm swift

如何建模对象之间的一对一关系?

例如,我有 user_infoA、user_infoB 和 user_profile 的模型。

user_profile

  • user_id (PK)
  • 姓名
  • 年龄

user_infoA

  • info_a_id (PK)
  • 用户资料

user_infoB

  • info_b_id (PK)
  • 用户资料

user_profile (P) 与user_infoA (A) 和user_infoB (B) 都有关系。 当A被删除时,P是否也会被删除? 只有当相关的A和B被删除时,P才会被删除?

我怎样才能用领域快速建模呢?

多对一关系需要可选属性,这使我使用强制展开可选。 :(


[编辑]

class RealmMyProfile: Object {
  @objc dynamic var id: Int64 = 0
  @objc dynamic var profile = RealmUserProfile()
}

class RealmUserProfile: Object {
  @objc dynamic var userId: Int64 = 0
  @objc dynamic var name: String = ""

  override static func primaryKey() -> String? {
    return "userId"
  }
}

异常“必须将RealmMyProfile.profile属性标记为可选。” 发生了。 它应该是可选的。

Realm 中的一对一关系(链接)不能强制链接始终存在。 所以它们总是必须被标记为可选,因为没有办法防止 nil 被存储为文件格式的链接。

因此,我们要求在 Swift 中定义的 Realm 模型明确地将一对一关系标记为可选。

class RealmMyProfile: Object {
  @objc dynamic var id: Int64 = 0
  @objc dynamic var profile:RealmUserProfile?
}

class RealmUserProfile: Object {
  @objc dynamic var userId: Int64 = 0
  @objc dynamic var name: String = ""

  override static func primaryKey() -> String? {
    return "userId"
  }
}

您可以执行此解决方案,这可以使您免于使用展开值

领域问题2814

dynamic var profile_:RealmUserProfile? = nil
var profile: RealmUserProfile {
    get {
        return profile_ ?? RealmUserProfile()
    } 
    set {
        profile_ = newValue
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM