CoreDataのFetchRequestで得られた要素を別ビューにBinding相当で渡したい時

タイトル長くなってます(汗

CoreDataのデータを@FetchRequestで取得して、その要素を別ビューに編集用に渡したい時ありますよね。
その時に、どうやって渡せば良いかのメモです。

MEMO
CoreDataでは以下のようなモデルを作り、適当なWrappedPropertyを作っています。

  • Recordは、CoreDataのEntity
  • volumeは、Recordのプロパティ

前提のContentView

以下のContentViewがあって、DetailViewという子ViewにRecordを渡して、詳細を編集できるようにします。
問題は、DetailViewにどうやって要素を渡すのか? という点です。

@FetchRequestの要素はBindingで渡せない

@Bindingで受けようとすると、受け側のビュー(DetailView)で、以下のように定義すると思います。

渡す側(ContentView)では、以下のように渡すと思うのですが、エラーになります。

NSManagedObjectは、ObservableObjectでした

NSManagedObjectは、ObservableObjectで、各プロパティは、@Published相当らしいです。
@Observedで受けようとして受け側のビュー(DetailView)で、以下のように定義してみました。

渡す側(ContentView)では、以下のように渡すと期待通りの動きになります。

テストしたコード

XCode11.4を使って、以下のコードで動作を確認しました。
ContentView.swift

DetailView.swift

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です