我需要创建一个MyPerson结构来存储firstName和lastName属性,这些属性需要全局保存和访问。在任何给定时间,我只有一个“人”。
现在,尽管我设法做到了使我的人员实例可以全局访问,但在整个构建中仍然无法持久。我在做什么错?
<<struct MyPerson {
var firstName: String {
didSet {
UserDefaults.standard.set(firstName, forKey: "fn")
}
}
var lastName: String {
didSet {
UserDefaults.standard.set(lastName, forKey: "ln")
}
}
init(first: String, last: String) {
self.firstName = first
self.lastName = last
}
}
class Global {
static let global = Global()
var person: MyPerson?
private init() { }
}
struct Home: View {
var body: some View {
Button(action: {
Global.global.person = MyPerson(first: "John", last: "Doe")
}) {
Text("BUTTON")
}
}
}
struct Home2: View {
var body: some View {
Button(action: {
guard let user = Global.global.person else {return}
print(user.firstName)
}) {
Text("BUTTON")
}
}
}
struct MyPerson {
...
/// Failable initializer that checks for a previously-saved MyPerson
init?() {
guard let first = UserDefaults.standard.string(forKey: "fn"),
let last = UserDefaults.standard.string(forKey: "ln") else {
return nil
}
self.init(first: first, last: last)
}
}
class Global {
...
private init() {
if let person = MyPerson() {
self.person = person
}
}
}