SwiftUI / Не получается сохранить Picker таймер

Не получается сохранить выбранное значение таймера, после ухода с View.

Кратко: пользователь попадает на экран, выбирает время таймера, нажимает сохранить, выбранное значение сохраняется в UserDefaults. Далее человек уходит с экрана (через крестик сверху). Когда он возвращается во вью таймера - должно быть последнее выставленное значение из UserDefaults.

Код модельки Таймера:

import SwiftUI
import Combine

class TimerSettings: ObservableObject {
    
    @Published var selectedTime: Int?
    
    init(initialSelectedTime: Int?) {
        self.selectedTime = initialSelectedTime
    }
    //униварсальная функция сохранения
    func saveSettings(time: Int, forKey: String) {
        UserDefaults.standard.set(time, forKey: forKey)
        print(time)
    }
    //универсальная функция загрузки
    func loadSettings(forKey: String) -> Int? {
        if let savedSettings = UserDefaults.standard.object(forKey: forKey) as? Int {
            selectedTime = savedSettings
            return savedSettings
        } else {
            selectedTime = nil
            return nil
        }
    }
}

Код Вью Таймера:

import SwiftUI

struct TimerView: View {

    @StateObject var timerSettings = TimerSettings(initialSelectedTime: nil)

    @State var selectedTime = 3
    
    var body: some View {
            VStack {
                Text("Настройте таймер игры:")
                    .foregroundStyle(Color(.black).opacity(0.8))
                Picker("Время таймера", selection: $selectedTime) {
                    ForEach(1..<31, id: \.self) {
                        Text("\($0) мин").tag($0)
                    }
                }.pickerStyle(WheelPickerStyle())
                    .frame(width: 300, height: 300)
                Button("Сохранить") {
                
                    timerSettings.saveSettings(time: selectedTime, forKey: "timerSettings")
                    
                }
                .font(.title)
                .foregroundColor(.blue)
                .padding(.bottom, 100)
                .onAppear {
                    timerSettings.loadSettings(forKey: "timerSettings")!
                }
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .background(Color(#colorLiteral(red:0.8980392157, green: 0.9333333333, blue: 1, alpha: 1)))
            .navigationBarBackButtonHidden(true)
            .toolbar {
                ToolbarItem(placement: .navigationBarLeading) {
                    CustomBackButtonView()
                }
            }
        }
    }

#Preview {
    TimerView()
}

Вью таймера


Ответы (0 шт):