在SwiftUI中,当我们使用@Published
属性包装器将属性标记为可观察对象(ObservableObject)时,对该属性进行更改不会自动更新视图。这是因为@Published
只会在属性被赋予新值时发送通知,而不会在属性的内部更改时发送通知。
要使视图在@Published
数组中对ObservableObject的更改时更新,我们可以使用@ObservedObject
属性包装器来观察可观察对象。@ObservedObject
用于标记视图中的属性,以便当可观察对象发生更改时,视图可以自动更新。
以下是一个示例代码,演示了如何使用@ObservedObject
来更新视图:
import SwiftUI
import Combine
class MyObject: ObservableObject {
@Published var array: [Int] = []
func addObject(_ object: Int) {
array.append(object)
}
}
struct ContentView: View {
@ObservedObject var myObject = MyObject()
var body: some View {
VStack {
Button(action: {
self.myObject.addObject(1)
}) {
Text("Add Object")
}
List {
ForEach(myObject.array, id: \.self) { item in
Text("\(item)")
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
在上面的示例中,我们创建了一个名为MyObject
的可观察对象,其中包含一个@Published
数组属性array
。在ContentView
中,我们使用@ObservedObject
将myObject
标记为可观察对象,以便当array
发生更改时,视图可以自动更新。
在视图的body
中,我们创建了一个按钮,当点击按钮时,会调用addObject
方法向array
中添加一个新的整数。然后,我们使用ForEach
循环遍历myObject.array
中的每个元素,并将其显示为文本。
这样,当我们点击按钮添加新对象时,视图会自动更新以显示新的对象。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云