アプリ内で共通の Observable データ
note
- iOS 17 以降用。バージョンによって書き方が変わりがちなので注意
定義
swift
import Observation
@MainActor
@Observable
class ApplicationData {
var selectedFile: File? = nil
..
}
@main
swift
import SwiftUI
@main
struct LocalPDFViewerApp: App {
@State private var appData = ApplicationData() // ← ★1. ここで初期化
...
var body: some Scene {
WindowGroup {
ContentView()
.environment(appData) // ← ★2. View から環境変数で取得可能にする
}
}
}
各 View
swift
import SwiftUI
import ColorUtil
import FileUtil
struct FileListView: View {
@Environment(ApplicationData.self) private var appData // ← ★3. 環境変数を参照
...
var body: some View {
@Bindable var appData = appData // ← ★4. 双方向バインディングにする場合はこのように上書き
...
}
}
(参考) Preview で使用の場合
swift
#Preview {
FileListView()
.environment(ApplicationData())
}