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()
}
}