Adding Observables class

This commit is contained in:
2020-12-21 20:54:59 +01:00
committed by Patrick Müller
parent bdc3560668
commit f47674cdbb
5 changed files with 72 additions and 9 deletions
+2
View File
@@ -10,11 +10,13 @@ import SwiftUI
@main
struct DHBW_ServiceApp: App {
let persistenceController = PersistenceController.shared
let settings = LocalSettings()
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistenceController.context)
.environmentObject(settings)
}
}
}
@@ -0,0 +1,25 @@
//
// LocalSettings.swift
// DHBW-Service
//
// Created by Patrick Müller on 21.12.20.
//
import Foundation
import Combine
private var cancellables = [String:AnyCancellable]()
extension Published {
init(wrappedValue defaultValue: Value, key: String) {
let value = UserDefaults.standard.object(forKey: key) as? Value ?? defaultValue
self.init(initialValue: value)
cancellables[key] = projectedValue.sink { val in
UserDefaults.standard.set(val, forKey: key)
}
}
}
class LocalSettings: ObservableObject {
@Published(wrappedValue: true, key: "IsFirstOpening") var isFirstOpening: Bool // To determine if the user is logged in
}
+22 -8
View File
@@ -9,22 +9,36 @@ import SwiftUI
import CoreData
struct ContentView: View {
@EnvironmentObject var settings: LocalSettings
@State private var selection = 0
var body: some View {
TabView(selection: $selection) {
HomeView()
.tabItem {
VStack {
Image(systemName: "house.fill")
Text("Home")
}
Group {
if(!settings.isFirstOpening) {
TabView(selection: $selection) {
HomeView()
.tabItem {
VStack {
Image(systemName: "house.fill")
Text("Home")
}
}
.tag(0)
}
.tag(0)
} else {
Button(action: {
self.settings.isFirstOpening = !self.settings.isFirstOpening
}){
Text("First opening toggle")
}
}
}
}
}
extension ContentView{
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
+11 -1
View File
@@ -8,13 +8,23 @@
import SwiftUI
struct HomeView: View {
@EnvironmentObject var settings: LocalSettings
var body: some View {
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
VStack {
Button(action: {
self.settings.isFirstOpening = !self.settings.isFirstOpening
}){
Text("First opening toggle")
}
Text("Test")
}
}
}
struct HomeView_Previews: PreviewProvider {
static var previews: some View {
HomeView()
.preferredColorScheme(.dark)
}
}