Realm Swift子类化

3

我正在使用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?

1个回答

2

如果您要声明类型为其他Realm子类的普通Swift属性,则无法这样做。您需要使用多对一关系

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

@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)更短。


这解决了我的SIGBART错误,但是它给我带来了这个运行时错误:-- `由于以下错误需要迁移:
  • 已添加属性“Friend.user”。" UserInfo={NSLocalizedDescription=由于以下错误需要迁移:
  • 已添加属性“Friend.user”。`
- Nader Besada
2
那是完全不同的问题。您必须在AppDelegate中添加一个迁移块。我还建议阅读完整的Realm文档,因为似乎您刚开始使用Realm,并且其中包含了对初学者非常有用的信息。 - Dávid Pásztor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接