Balbas Code

SwiftUIでのデータの流れ: @State, @ObservedObject, とビューのイベント

公開日: 2023-09-18 11:54:05
更新日: 2023-09-19 21:42:26

SwiftUIで画面の更新処理についてまとめました。


 


.onAppear():


画面にビューが表示されるときに、発動。
メッセージをプリントするサンプル。


Text("Hello, SwiftUI!")
.onAppear {
print("Text view has appeared!")
}

 


.onDisappear():


画面からビューが消えるときに発動。
メッセージをプリントするサンプル!!!


Text("Goodbye, SwiftUI!")
.onDisappear {
print("Text view has disappeared!")
}

 


@State:


変数などの変化を監視し、画面に反映させる。


ボタンをタップするたびに数値が増加するカウンターのサンプル。


struct CounterView: View {
@State private var count = 0

var body: some View {
VStack {
Text("Count: \(count)")
Button("Increment") {
count += 1
}
}
}
}

 


 


@ObservedObject:


外部の参照型オブジェクトの変更を監視して、その変更を受け取った際にビューを再描画する


外部のオブジェクトの変更を監視するサンプル!!!


class User: ObservableObject {
@Published var name: String

init(name: String) {
self.name = name
}
}

struct UserView: View {
@ObservedObject var user: User

var body: some View {
Text(user.name)
}
}

 


 


.onChange(of:perform:):


特定の値の変更を検出し、その変更に応じてアクションを実行するためのモディファイア


2つのテキストフィールドがあり、一方のテキストが変更されるともう一方のテキストフィールドにその内容がコピーするサンプル!!!


struct CopyTextView: View {
@State private var text1: String = ""
@State private var text2: String = ""

var body: some View {
VStack {
TextField("Enter text", text: $text1)
.onChange(of: text1) { newValue in
text2 = newValue
}
TextField("Copied text", text: $text2)
}
.padding()
}
}