我一直在努力实现我头痛的两个主要目标。抱歉,如果这是一个简单的修复程序,那么我对swift/swiftui还是有点陌生

一定时间后

  • 触发 Action 。
  • 触发@State以根据耗时来更改值。

  • 我搜索了堆栈溢出,并找到了建议使用计时器的答案:
    struct CurrentDateView : View {
        @State var now = Date()
    
        let timer = Timer.publish(every: 1, on: .current, in: .common).autoconnect()
    
        var body: some View {
            Text("\(now)")
                .onReceive(timer) {
                    self.now = Date()
                }
        }
    }
    

    但是我将如何合并它,以便可以使用诸如@State之类的东西,在经过7.5秒后将我的值更改为false:
    @State randomTF : Bool = true
    

    或在经过7.5秒后将Text("Please Enter Above")更改为Text("Sorry Too Late")

    最佳答案

    您可以像这样使用DispatchQueue延迟某些时间:

    struct ContentView: View {
    
        @State private var hasTimeElapsed = false
    
        var body: some View {
            Text(hasTimeElapsed ? "Sorry, too late." : "Please enter above.")
                .onAppear(perform: delayText)  // Triggered when the view first appears. You could
                                               // also hook the delay up to a Button, for example.
        }
    
        private func delayText() {
            // Delay of 7.5 seconds
            DispatchQueue.main.asyncAfter(deadline: .now() + 7.5) {
                hasTimeElapsed = true
            }
        }
    }
    
    时间过去后,它将@State属性hasTimeElapsed设置为true,然后更新 View 主体。

    10-07 22:31