下面的工作等待时间为 2 秒,但将其设置为 0.5 并且您无法通过第二个屏幕。
import SwiftUI
let waitTime: TimeInterval = 0.5
class ContentViewModel: ObservableObject {
@Published var shouldNavigate = false
init() {
DispatchQueue.main.asyncAfter(deadline: .now() + waitTime) { [weak self] in
self?.shouldNavigate = true
}
}
}
struct ContentView: View {
@ObservedObject var viewModel = ContentViewModel()
var body: some View {
NavigationView {
VStack{
Text("Hello, world!")
.padding()
NavigationLink(
destination: ContentView2(),
isActive: $viewModel.shouldNavigate,
label: {
EmptyView()
}).isDetailLink(false)
}
}
}
}
struct ContentView2: View {
@ObservedObject var viewModel = ContentViewModel()
var body: some View {
VStack {
Text("View 2")
.padding()
NavigationLink(
destination: ContentView2(),
isActive: $viewModel.shouldNavigate,
label: {
EmptyView()
}).isDetailLink(false)
}
}
}
当我订阅shouldNavigate
并打印传入的值时,我可以看到较短的等待时间会导致它nil
在导航后快速进入,而较长的等待时间不会产生这种效果。
是否发生了一些我不知道的生命周期事件?
IRL,我在视图模型搜索广告 BLE 外围设备时显示一个屏幕,并在发现它时进行导航。这种搜索可能非常快。我宁愿不实施一些临时延迟,因为它很臭(感觉就像我在对用户撒谎)。