データの保存を作っている最中ですが、本日は少しだけ寄り道をして、ビューとビューの間でのデータの受け渡しをやってみます。

将来的にはメモ帳になる予定なので、メモ一覧画面(ビュー)から、メモ編集画面(ビュー)へのデータ連携が必要になるのです。

ニャンコ先生「と、そのことをうっかり忘れて先に進んでいたわけだニャ」

そういうことです。

ビュー間のデータの受け渡しについても、最終的には「UserDefaults」や「データベース」を使いそうな気がしますが、とりあえずもっと基本的な「変数での受け渡し」を使えるようになっておきましょう。

ビュー間で変数を受け渡す場合、「変数の宣言」と「渡し方」がポイントになるようです。

・親ビューで「@State(private)」を付けて宣言する
・親ビューから子ビューにデータを渡すときは「$変数名」と「$」を付けて渡す
・子ビューでその変数を使うときには「@Binding」を付けて宣言する

こんな感じ。

確かに、「@State private var 変数名」という宣言をしているものが多いなーとは思っていたのですが、なるほど、こう宣言しておくと、他のビューにデータを受け渡せるようになるわけですね(正しくはデータ自体を渡すのではなく、そのデータが入っている器、「参照」が渡せるようになるらしいです)。

渡される方のビューには「@Binding var 変数名」と宣言しておくことで、親ビューから渡されたデータ(参照を元に引っ張ってきたデータ)を表示することができるようになります。

実際に、一覧画面(親ビュー)の三角形に「乱数で作った数字」を表示してみて、それを編集画面(子ビュー)に渡してみると……おお、ちゃんと同じ数字が表示されました。

こんな感じに各三角形に「識別番号」を付けておけば、編集画面でその番号に対応したデータを引っ張り出すことができるハズですね。

よしよし。では次回は、あらためてデータ保存の深堀りをしていきましょう。


Apple Developer Documentation
Structure > State
A property wrapper type that can read and write a value managed by SwiftUI.
外部リンクを開く
Structure > Binding
A property wrapper type that can read and write a value owned by a source of truth.
外部リンクを開く