サイドバーと広域変数の組み合わせの基本動作を確認する。
サイドバーにはListを利用するのだが今回はボタンで手抜き。
普通はパスをやり取りするが今後の画像編集を考えて画像データを利用している。
【MyApp.swift】
@main
struct MyApp: App {
@StateObject var dataModel = DataModel()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(dataModel)
}
}
}
【ContentView.swift】
struct ContentView: View {
@EnvironmentObject var dataModel: DataModel
@State private var visibility: NavigationSplitViewVisibility = .all // 分割メニュー設定
var body: some View {
NavigationSplitView(columnVisibility: $visibility) {
VStack{
Button("Test") {
dataModel.imageManager.originalImage = UIImage(named: "Test")
}
Button("Test2") {
dataModel.imageManager.originalImage = UIImage(named: "Test2")
}
}
// } content: { これを追加すると3列になる
} detail: {
ImageView()
.environmentObject(dataModel)
}
}
}
【ImageView.swift】
struct ImageView: View {
@EnvironmentObject var dataModel: DataModel
var body: some View {
if let image = dataModel.imageManager.originalImage {
Image(uiImage: image)
.resizable()
.scaledToFit()
}
else {
Image(systemName: "doc")
Text("No data")
}
}
}
【DataModel.swift】広域変数
class DataModel: ObservableObject {
@Published var imageManager: ImageManager = ImageManager()
}
【ImageManager.swift】機能別に管理する予定
struct ImageManager {
var originalImage: UIImage? = nil
}