gpt4 book ai didi

swift - Realm Swift 子类化

转载 作者:搜寻专家 更新时间:2023-10-31 22:40:29 24 4
gpt4 key购买 nike

我有两个模型,我正在尝试使用 RealmSwift 快速子类化

模型 1:用户

@objcMembers class User: Object, Codable {

dynamic var id: Int = 0
dynamic var username: String = ""
dynamic var email: String = ""
dynamic var counts: Counts = Counts(follows: 0, followed_by: 0)

convenience init(id: Int, username: String, email: String, counts: Counts) {
self.init()
self.id = id
self.username = username
self.email = email
self.counts = counts
}
}

class Counts: Codable {
let follows: Int
let followed_by: Int

init(follows: Int, followed_by: Int) {
self.follows = follows
self.followed_by = followed_by
}
}

这里我创建了一个继承codable的模型,因为我使用的是Swift 4新的解码方式。这个模型工作正常。我可以去添加一个用户并阅读它。所以这样做很好:

let newUser = User(id: 1, username: "user1", email: "user1@gmail.com", counts: Counts(follows: 100, followed_by: 500000000))

RealmService.shared.write(newUser)

现在我正在尝试创建一个名为 Friend 的模型,它有一个继承自 User 的字段

模型 2: friend

@objcMembers class Friend: Object {

dynamic var user: User = User(id: 0, username: "", email: "", counts: Counts(follows: 0, followed_by: 0))
dynamic var dateAdded: Date = Date(timeIntervalSinceNow: 0)

convenience init(user: User, dateAdded: Date = Date(timeIntervalSinceNow: 0)) {
self.init()
self.user = user
self.dateAdded = dateAdded
}
}

当我这样做并加载我的应用程序时,我得到一个 SIGBART,它突出显示了我的 Realm 初始化:let realm = RealmService.shared.realm

当我删除我的 friend 模型时,该应用程序运行正常。

如何在 Realm 中正确地子类化?

最佳答案

您不能将属性声明为类型为其他 Realm 子类的普通 Swift 属性。您正在寻找的是 many-to-one relationship .

多对一关系必须声明为可选值,并且您不能提供默认值

@objcMembers class Friend: Object {

dynamic var user: User?
dynamic var dateAdded: Date = Date()

convenience init(user: User, dateAdded: Date = Date()) {
self.init()
self.user = user
self.dateAdded = dateAdded
}
}

无关,但是当你想创建一个表示当前时间的Date对象时,只需调用Date的默认空初始化器,它会为你做这件事并且它比 Date(timeIntervalSinceNow: 0) 短得多。

关于swift - Realm Swift 子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47799679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com