🙌
SwiftDataで多対多の設定
環境
Xcode 15.4
iOS 17.5
シミュレータ
M1 Mac mini
状況 & やりたいこと
- SwiftData
- モデルは多対多、双方向
- 自分を削除するときに相手は削除しない。相手の中にある「自分」を削除する
- 自分の中にある相手を削除(つまり配列の1要素を削除)するときに相手は削除しない。相手の中にある「自分」を削除する
下の例で言うと
「自分を削除」はAインスタンス(or Bインスタンス)をまるごと削除
「自分の中にある相手を削除」はAの中のb配列(or Bの中のa配列)の要素を(ひとつ)削除
ソース
@Model
final class A {
var name: String
@Relationship(deleteRule: .nullify, inverse: \B.a) var b: [B] = []
//以下略
@Model
final class B {
var name: String
@Relationship(deleteRule: .nullify) var a: [A] = []
//以下略
注意
inverse
がないと挙動が変わる
inverse
は片方で良い
おまけ
N:N
many to many
Discussion