Skip to main content

アプリ内で共通の 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())
}