Допустим, у меня есть класс Employee, свойство изображения которого можно наблюдать.
internal class Employee: CustomDebugStringConvertible, Identifiable, ObservableObject {
internal let name: String
internal let role: Role
@Published internal var picture: UIImage?
}
С классом, в котором хранится массив сотрудников. Этот массив может быть видоизменён позже, поэтому это свойство @Published:
internal class EmployeeStorage: ObservableObject {
@Published internal private(set) var employees: [Employee]
}
Теперь у меня есть список представлений, в которых используется хранилище сотрудника:
struct EmployeeList: View {
@ObservedObject var employeeStorage = EmployeeStorage.sharedInstance
var body: some View {
// Uses employeeStorage.employee property to draw itself
}
}
И этот список используется впредставление содержимого:
struct ContentView: View {
@ObservedObject var employeeStorage = EmployeeStorage.sharedInstance
var body: some View {
// Uses an EmployeeList value
}
}
Предположим, что теперь объект EmployeeStorage изменяет мутирующий массив сотрудников: это эффективно обновляет пользовательский интерфейс, и я вижу, что список обновляется с новой коллекцией сотрудников. Проблема: что если я захочу добиться того же эффекта при изменении свойства изображения сотрудника? Я подумал, что этого достаточно, но в моем случае (у меня есть более сложный пример) пользовательский интерфейс не обновляется в случае изменения имиджа сотрудника. Как это сделать?