假设我有一个名为“员工”的类,其中的图片属性可以被观察。
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对象更改了员工数组: 这实际上更新了UI,我可以看到列表已更新为新的员工集合。问题是:如果我想在员工的图片属性更改时实现相同的效果怎么办?我认为这已经足够了,但在我的情况下(我有一个更复杂的示例),如果员工的图像更改,则不会更新UI。如何做到这一点?
ContentView
有一个提到EmployeeList
的注释,但您并没有定义EmployeeList
类型。什么是EmployeeList
?ContentView
应该显示EmployeeStorage
中的所有员工,还是只显示单个Employee
,或者其他内容?如果它只需要显示单个Employee
,为什么需要整个EmployeeStorage
? - rob mayoff