【发布时间】:2022-01-07 01:43:05
【问题描述】:
我不熟悉 UserDefaults,想试一试,所以我将所有数据存储在用户默认类中(如图所示)
import Foundation
import Combine
class UserSettings: ObservableObject {
@Published var mon: [UserClass] {
didSet {
UserDefaults.standard.set(mon, forKey: "mon")
}
}
@Published var tue: [UserClass] {
didSet {
UserDefaults.standard.set(tue, forKey: "tue")
}
}
@Published var wed: [UserClass] {
didSet {
UserDefaults.standard.set(wed, forKey: "wed")
}
}
@Published var thu: [UserClass] {
didSet {
UserDefaults.standard.set(thu, forKey: "thu")
}
}
@Published var fri: [UserClass] {
didSet {
UserDefaults.standard.set(fri, forKey: "fri")
}
}
@Published var homeworks: [String] {
didSet {
UserDefaults.standard.set(homeworks, forKey: "homeworks")
}
}
@Published var lastSet: String {
didSet {
UserDefaults.standard.set(lastSet, forKey: "lastSet")
}
}
init() {
self.mon = UserDefaults.standard.object(forKey: "mon") as? [UserClass] ?? []
self.tue = UserDefaults.standard.object(forKey: "tue") as? [UserClass] ?? []
self.wed = UserDefaults.standard.object(forKey: "wed") as? [UserClass] ?? []
self.thu = UserDefaults.standard.object(forKey: "thu") as? [UserClass] ?? []
self.fri = UserDefaults.standard.object(forKey: "fri") as? [UserClass] ?? []
self.homeworks = UserDefaults.standard.object(forKey: "homeworks") as? [String] ?? []
self.lastSet = UserDefaults.standard.object(forKey: "lastSet") as? String ?? ""
print("homeworks \(homeworks)")
}
}
struct UserClass: Hashable, Codable {
let start: String
let end: String
let name: String
}
func encodeClass(classes: [UserClass], key: String) {
do {
// Create JSON Encoder
let encoder = JSONEncoder()
// Encode Note
let data = try encoder.encode(classes)
print(data)
// Write/Set Data
UserDefaults.standard.set(data, forKey: key)
} catch {
print("Unable to Encode Array of Notes (\(error))")
}
}
func decodeClass(key: String) -> [UserClass] {
var classes: [UserClass] = []
if let data = UserDefaults.standard.data(forKey: key) {
do {
// Create JSON Decoder
let decoder = JSONDecoder()
// Decode Note
classes = try decoder.decode([UserClass].self, from: data)
} catch {
print("Unable to Decode Notes (\(error))")
}
}
return classes
}
但是当我在 iOS 应用和 WatchOS 应用上读取我的数据时,就好像它们各自拥有一份不会相互影响的独立数据副本。例如,我会在手表上永久保存一组作业字符串,但手机版本仍然会说该数组为空。如何让它们同步为一个?
顺便说一句,在我的 ContentViews 上,我只使用 ObservedObject 这样的方式读取存储的数据
@ObservedObject var userSettings = UserSettings()
【问题讨论】:
标签: swift watchos userdefaults