Как сохранить данные в моем приложении после его закрытия в swiftUI? - PullRequest
1 голос
/ 02 марта 2020

Я хочу показать пользователю тот же экран даже после того, как пользователь закрыл приложение и снова открыл его

Данные, которые я пытаюсь сохранить, это всего лишь 3 свойства состояния, вот и все.

Как мне это сделать в swiftUI?

1 Ответ

1 голос
/ 03 марта 2020

Если вы сохраняете простые данные, я бы порекомендовал просто использовать UserDefaults. Я написал небольшое приложение в SwiftUI, чтобы продемонстрировать реализацию этого, но, надеюсь, вы сможете адаптировать концепции к вашим потребностям.

Вы можете увидеть процесс в действии в приложении, если вы поместите этот код в новый проект в XCode. Введите значения, затем нажмите кнопку «Сохранить». Выйдите из приложения (но не удаляйте его) и перезапустите приложение. Нажатие кнопки «Загрузить» перезагрузит последние сохраненные значения. Вы можете сохранить новые значения, снова нажав кнопку Сохранить.

Если вы хотите загрузить сохраненные значения прямо при появлении экрана / приложения, просто раскомментируйте строку, где вы видите .onAppear(perform: load).

Надеюсь, это поможет! -Дан

import SwiftUI


struct ContentView: View {
@State private var isBirthday = false
@State private var age = ""
@State private var name = ""

private let defaults = UserDefaults.standard

var body: some View {
    VStack {
        Spacer()
        TextField("Enter your name", text: $name)
        TextField("Enter your age.", text: $age)
        Toggle(isOn: $isBirthday) {
            Text("Is it your birthday?")
        }.padding()
        Spacer()

        Text("\(name)")
        Text("\(age)")
        Text(isBirthday ? "Happy Birthday!" : "Hello \(name)")
        Spacer()
        HStack {
            Button("Save") {
                self.save()
            }
            .padding(30)
            .border(Color.blue)

            Button("Load") {
                self.load()
            }
            .padding(30)
            .border(Color.green)

        }
    }
//      .onAppear(perform: load)
    .textFieldStyle(RoundedBorderTextFieldStyle())
}

func save() {
    defaults.set(isBirthday, forKey: "birthday")
    defaults.set(age, forKey: "age")
    defaults.set(name, forKey: "name")
}

func load() {
    let savedName = defaults.string(forKey: "name")
    let savedAge = defaults.string(forKey: "age")
    let savedBirthday = defaults.bool(forKey: "birthday")

    isBirthday = savedBirthday
    // using nil coalescing operator as a guard for the optional values but there are other ways to handle this.
    age = savedAge ?? ""
    name = savedName ?? ""
  }
}



struct ContentView_Previews: PreviewProvider {
static var previews: some View {
    ContentView()
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...