【发布时间】:2020-07-12 08:09:45
【问题描述】:
在下面的代码中,观察到的对象被更新,但观察它的 View 没有。知道为什么吗?
代码在屏幕上显示 10 个数字 (0..
打印语句显示按钮正在更新数字,但视图没有相应更新。我知道更新数组中的值不会改变数组值本身,所以我使用手动objectWillChange.send() 调用。我原以为应该会触发更新,但屏幕永远不会改变。
有什么想法吗?我对使用NumberLine 作为类或结构,或者根本不使用NumberLine 类型而是仅在ContentView 结构中使用数组变量的解决方案感兴趣。
代码如下:
import SwiftUI
struct ContentView: View {
@ObservedObject var numberLine = NumberLine()
var body: some View {
VStack {
HStack {
ForEach(0 ..< numberLine.visible.count) { number in
if self.numberLine.visible[number] {
Text(String(number)).font(.title).padding(5)
}
}
}.padding()
Button(action: {
let index = Int.random(in: 0 ..< self.numberLine.visible.count)
self.numberLine.objectWillChange.send()
self.numberLine.visible[index].toggle()
print("\(index) now \(self.numberLine.visible[index] ? "shown" : "hidden")")
}) {
Text("Change")
}.padding()
}
}
}
class NumberLine: ObservableObject {
var visible: [Bool] = Array(repeatElement(true, count: 10))
}
【问题讨论】:
-
在我的情况下这是一个愚蠢的问题,我不得不将正在更新的 observedObject 放在主线程上......突然间一切都开始按预期工作
-
我在回答中回答了你的问题!
标签: ios arrays swiftui observableobject