Вы пишете в UserDefaults, но никогда не читаете из них. Чтобы сохранить человека в разных сборках, вам нужно проверить, было ли ранее сохранено имя.
Изменить: Наблюдатель didSet
не вызывается из инициализатора, поэтому поля должны быть записаны отдельно при инициализации значений. Поскольку вы используете структуру для хранения данных MyPerson
, я бы рекомендовал изменить их на свойства let
.
Возможно, что-то вроде этого:
struct MyPerson {
let firstName: String
let lastName: String
init(first: String, last: String) {
self.firstName = first
self.lastName = last
UserDefaults.standard.set(firstName, forKey: "fn")
UserDefaults.standard.set(lastName, forKey: "ln")
}
/// 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
}
}
}
Итак, теперь после того, как вы один раз установили глобальное лицо на John Doe
в вашем представлении Home
, при следующем запуске приложения вы должны увидеть этого человека в Home2
.