Если вы сохраняете простые данные, я бы порекомендовал просто использовать 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()
}
}