【发布时间】:2020-05-26 07:27:47
【问题描述】:
下面是我的工作代码:
struct ReaderView: View {
@State var presentingSettingsSheet = false
@State var currentDate = Date()
private let timer = Timer.publish(every: 1.0, on: .main, in: .common)
.autoconnect()
.eraseToAnyPublisher()
var body: some View {
let filter = "Showing all stories"
return NavigationView {
List {
Section(header: Text(filter).padding(.leading, -10)) {
VStack(alignment: .leading, spacing: 10) {
TimeBadge(time: 20.0)
Text("Title")
.frame(minHeight: 0, maxHeight: 100)
.font(.title)
PostedBy(time: 30.0, user: "Author", currentDate: self.currentDate)
}
.padding()
}
}
.sheet(isPresented: self.$presentingSettingsSheet, content: {
SettingsView()
})
.navigationBarTitle(Text("Stories"))
.navigationBarItems(trailing:
Button("Settings") {
self.presentingSettingsSheet = true
}
)
}
.onReceive(timer) {
print($0)
self.currentDate = $0
}
}}
但是如果我在List Scope 之后添加onReceive 它不起作用,如果我在navigationBarItems 声明之后添加它就会开始工作。所以我的问题是为什么 onReceive 在代码中放置不同时表现不同。我知道修饰符的顺序会改变最终生成的 UI,但 onReceive 是否相同。
我正在寻找可能的解释。
我正在使用: Xcode 11.5 模拟器 iPhone SE(第 2 代),13.5。
【问题讨论】: