SwiftUIでViewを入れ替える方法

はじめに
前回、ButtonでTextの文字を変更するやり方を解説しましたが、今回はView単位で入れ替える方法を解説いたします。
ここで紹介するやり方以外にもViewを入れ替える方法はあります。
ゴール
次の動画がゴールのイメージです。紫色とオレンジ色の部分のViewを固定されたボタンで切り替えます。
SwiftUIでViewを入れ替えるプログラム
import SwiftUI
enum ContentState {
case first
case second
}
struct ContentView: View {
@State var state: ContentState = .first
var body: some View {
{
ZStack .green
Color.ignoresSafeArea()
(spacing: 64) {
VStackswitch state {
case .first:
()
FirstViewcase .second:
()
SecondView}
(state: $state)
ButtonView}.padding()
}
}
}
struct FirstView: View {
var body: some View {
() {
VStack("First").font(.system(size: 80)).bold()
Text}.padding().background(Color.purple).foregroundColor(.white)
}
}
struct SecondView: View {
var body: some View {
() {
VStack("Second").font(.system(size: 80)).bold().foregroundColor(.white)
Text}.padding().background(Color.orange)
}
}
struct ButtonView: View {
@Binding var state: ContentState
var body: some View {
(spacing: 32) {
HStack(action: {
Button= .first
state
}, label: {
("First").font(.system(size: 30)).foregroundColor(.white).bold()
Text})
(action: {
Button= .second
state
}, label: {
("Second").font(.system(size: 30)).foregroundColor(.white)
Text.bold()
})
}
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
()
ContentView}
}
プログラムの解説
viewの状態を管理しやすいように enum
で
ContentState
を宣言しました。ボタン部分は
ButtonView
で管理し、@Binding
で
ContentState
のプロパティ更新を通知できるようにしてます。また、全体の画面色は
Zstack
を使って変更してます。
ignoresSafeArea()
を指定することで画面の隅から隅までの背景色を変更できます。