【问题标题】:Delayed action in an alert in SwiftUISwiftUI 中警报中的延迟操作
【发布时间】:2021-02-17 16:13:23
【问题描述】:

是否可以选择在按下警报按钮后延迟操作?

我试过这样写代码:

 .alert(isPresented: $showingFeedback) {
                Alert(title: Text(scoreTitle), message:
                        Text(selectedQuestion!.feedback),
                        primaryButton:

                       .dispatchQueue.main.asyncAfter(deadline: .no () + 0.5) {
                       nextQuestion()},
                        
             
                      secondaryButton: .default(Text("Continue")) {
                        nextQuestion()}
                      
                )
            }

但是,当我尝试运行它时,我在视图旁边收到以下错误:

'无法生成表达式诊断;请提交错误报告'

【问题讨论】:

标签: swift swiftui alert dispatch


【解决方案1】:

您的代码的主要问题是没有像 .dispatchQueue.main.asyncAfter(deadline: .no () + 0.5) 这样的 Alert.Button。

相反,您可以使用.default 按钮并将DispatchQueue.main.asyncAfter 部分作为动作(正如Asperi 在cmets 中所建议的那样):

.alert(isPresented: $showingFeedback) {
    Alert(
        title: Text(scoreTitle),
        message: Text(selectedQuestion!.feedback),
        primaryButton: .default(Text("Next")) {
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                nextQuestion()
            }
        },
        secondaryButton: .default(Text("Continue")) {
            nextQuestion()
        }
    )
}

为清楚起见,您还可以将操作提取到其他函数:

.alert(isPresented: $showingFeedback) {
    Alert(
        title: Text(scoreTitle),
        message: Text(selectedQuestion!.feedback),
        primaryButton: .default(Text("Next"), action: nextTapped),
        secondaryButton: .default(Text("Continue"), action: continueTapped)
    )
}
func nextTapped() {
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
        nextQuestion()
    }
}

func continueTapped() {
    nextQuestion()
}

注意:最好避免强制展开:而不是:

selectedQuestion!.feedback

你可以这样做:

selectedQuestion?.feedback ?? "some default value"

【讨论】:

  • 谢谢你成功了,也谢谢你的建议。想知道您是否有更多建议 - 我发现当我按下 PrimaryButton 时,动作会继续到下一个问题,有没有办法让它只动作一次,直到再次按下按钮?
  • @Jon 如果您有新问题,我建议您创建一个新帖子并描述您的问题。我会尽力帮助你。
猜你喜欢
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多