一对一关系

温馨提示:本文最后更新于2025-01-19 09:17:55,某些文章具有时效性,若有错误或已失效,请在下方留言

一对一关系意味着每个 A对象都有一个对应的B对象,例如说每个人都有一本护照,或者每只宠物都有一个主人。

例如,如果我们有 CountryCity 模型,它们之间有一个真正的一对一关系,那么在创建 City 时,我们需要指定它属于哪个 Country,但在创建 Country 时,我们又需要指定它的 capitalCity 属性。

因此,为了能够创建对象并让 SwiftData 正确推断出关系,你应该始终将关系的两端都设为可选属性,如下所示:

@Model class Country {
    var name: String
    var capitalCity: City?

    init(name: String, capitalCity: City? = nil) {
        self.name = name
        self.capitalCity = capitalCity
    }
}

@Model class City {
    var name: String
    var country: Country?

    init(name: String, country: Country? = nil) {
        self.name = name
        self.country = country
    }
}

通过这种方式,我们的代码变得可行:

let country = Country(name: "China")
let city = City(name: "Shanghai", country: country)

modelContext.insert(city)

不要尝试同时插入 citycountry 对象—插入其中一个对象会自动插入另一个对象,因为它们之间存在关系。实际上,尝试同时插入它们很可能会抛出一个致命错误,提示信息为:”Duplicate registration attempt for object”。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容