【发布时间】:2019-08-04 16:03:40
【问题描述】:
我想根据另一个视图 (LeftView) 中的点击手势操作来更新视图 (RightView)。下面是我完成此操作的示例代码:
AppState.swift
import Foundation
class AppState: ObservableObject {
@Published var tapCount: Int = 0
func incrementTapCount() {
self.tapCount += 1
print("tap count \(self.tapCount)")
}
}
LeftView.swift
import SwiftUI
struct LeftView: View {
@ObservedObject var appState = AppState()
var body: some View {
VStack {
Text("Left View")
}
.frame(width: 100, height: 200)
.onTapGesture {
print("tapped left view")
self.appState.incrementTapCount()
}
}
}
RightView.swift
import SwiftUI
struct RightView: View {
@ObservedObject var appState = AppState()
var body: some View {
VStack {
Text("Right View")
Text("Tap Count: \(self.appState.tapCount)")
}.frame(width: 200, height: 200)
}
}
ContentView.swift
import SwiftUI
struct ContentView: View {
var body: some View {
HStack {
LeftView()
RightView()
}.frame(width: 300, height: 200)
}
}
很遗憾,RightView 文本不会随着点击次数而更新。但是,如果我在 ObservableObject 类中使用计时器来更新点击次数,那么 RightView 会正确更新。
import Foundation
class AppState: ObservableObject {
@Published var tapCount: Int = 0
init() {
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
self.tapCount += 1
}
}
func incrementTapCount() {
self.tapCount += 1
print("tap count \(self.tapCount)")
}
}
为什么 LeftView 中的点击手势不更新 RightView 文本?
【问题讨论】: