[SwiftUI]画面遷移先に値を渡す方法[Xcode]

スポンサーリンク
SwiftUI
スポンサーリンク

どうも、ちょげ(@chogetarou)です。

SwiftUIで画面遷移をする際に値を渡す方法を2つ紹介します。

スポンサーリンク

データバインディング

コード, プログラミング, ハッキング, Html, Web, データ, デザイン, 開発, プログラム

ひとつは、「データバインディングを使う」方法です。

遷移先の画面に@Bindingを付与した変数を用意しておきます。

そして、遷移先のビューに先頭に$をつけた状態変数を渡します。

struct SampleView: View {
    @State var onSwitch = false
    @State var text = "hello"
    var body: some View {
        if onSwitch {
            HelloView(text : $text)
        } else {
            Button(action: {
                self.onSwitch.toggle()
            }, label: {
                Text("遷移")
            })
        }
    }
}

struct HelloView : View {
    @Binding var text: String
    var body: some View {
        Text(text)
    }
}

HelloViewに画面遷移する際に、状態変数textの値を渡すことができます。

システム

監視, バイナリ, バイナリシステム, コンピュータ, バイナリコード, プログラミング, データ, Web

もうひとつは、SwiftUIのシステム自体にビューとは別で値を管理してもらう方法です。

SwiftUIのシステムに値を管理してもらうことでも、値を渡すことができます。

システムで値を管理するには、ObservableOjectを使います。

class Hello : ObservableObject {
    @Published var text = ""
}


struct SampleView: View {
    @ObservedObject var hello = Hello()
    
    @State var onSwitch = false
    @State var text = "hello"
    
    var body: some View {
        if onSwitch {
            HelloView(hello: hello)
        } else {
            Button(action: {
                self.hello.text = text
                self.onSwitch.toggle()
            }, label: {
                Text("遷移")
            })
        }
    }
}

struct HelloView : View {
    @ObservedObject var hello :Hello
    var body: some View {
        Text(hello.text)
    }
}

Observableクラスを使うことで、値の管理をビューとは別ですることができ、複数のビューで値を共有できるようになります。

具体的には、遷移前のビューでシステムに値を渡しておいて、遷移後のビューでその値を取り出せば値を渡しているようになります。

Observableの使い方については、「カピ通信」さんの記事がわかりやすいのでそちらを参考にしてみてください。

【SwiftUI】データバインディング
SwiftUIのデータバインディングの仕組みである@State、@ObservedObject、@EnvironmentObject各々の特徴について解説します。

まとめ

画面遷移で値を渡す方法は、2つです。

  • @Binding変数を使う
  • SwiftUIのシステムで値を管理させておく

コメント

タイトルとURLをコピーしました