ColorScheme
を使ってライトモードとダークモードをスイッチ出来るようにしてみる。
Contents 非表示
実装
ColorSchemeManager
import SwiftUI
final class ColorSchemeManager: ObservableObject {
@Published var colorScheme: ColorScheme = .light
func toggleColorScheme() {
colorScheme = (colorScheme == .light) ? .dark : .light
}
}
(アプリ名).swift
import SwiftUI
@main
struct SwiftUI_PlaygroundApp: App {
@StateObject private var colorSchemeManager = ColorSchemeManager()
var body: some Scene {
WindowGroup {
HomeView()
.environmentObject(colorSchemeManager)
.preferredColorScheme(colorSchemeManager.colorScheme)
}
}
}
メインのView
import SwiftUI
struct HomeView: View {
@EnvironmentObject var colorSchemeManager: ColorSchemeManager
var body: some View {
VStack {
Text("Current Mode: \(colorSchemeManager.colorScheme == .light ? "Light" : "Dark")")
.padding()
Button(action: {
colorSchemeManager.toggleColorScheme()
}) {
Text("Toggle Dark/Light Mode")
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
}
}
.padding()
}
}
ついでに@EnvironmentObjectを知ってみよう
MyGPT君に@EnvironmentObject
をわかりやすく説明してもらってみる。
どのビューからでもアクセス可能になって、データの一元管理が楽になるってことですな。