【问题标题】:SwiftUI Present an Alert. Result of 'Alert' Initializer is unusedSwiftUI 呈现警报。 “警报”初始化程序的结果未使用
【发布时间】:2021-07-06 10:55:48
【问题描述】:

我正在尝试在计时器完成后向我的应用程序添加警报,我只想弹出一个窗口来说明计时器已基本完成。每当我尝试任何事情时,都会收到此错误“警报”初始化程序的结果未使用。

感谢任何帮助。

.onReceive(timerMin, perform: { _ in
            guard isActive else { return }
            if timeRemainingMin > 0 {
                timeRemainingMin -= 1
            } else {
                isActive = false
                timeRemainingMin = defaultTimeRemainingMin
                                    
                Alert(title: Text("This is a test"), message: Text("This is a test message!"))

            }
            
        })

【问题讨论】:

  • 您需要向我们展示更多代码,伙计。您拥有的警报没有任何问题。你怎么称呼它,你认为它在哪里等等......
  • 我添加了更多代码。我正在尝试调用 .onRecieve
  • 你不能只在一些代码之后放置一个视图(警报)并期望它在代码执行到那一行时出现。这不是 Swiftui 的工作方式。

标签: swiftui


【解决方案1】:

“onReceive”不是显示警报的正确位置。使用“.alert(...)”显示它, 比如在这个测试代码中:

import SwiftUI

@main
struct TestApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
struct ContentView: View {
    @State private var showAlert = false
    var body: some View {
        Button("show alert") {
            showAlert.toggle()
        }
        .alert(isPresented: $showAlert) {
            Alert(title: Text("This is a test"), message: Text("This is a test message!"))
        }
    }
}

因此,在“onReceive”中使用您的计时器,只需在测试按钮中使用“showAlert”即可。比如:

.onReceive(timerMin) { _ in
    guard isActive else { return }
    if timeRemainingMin > 0 {
        timeRemainingMin -= 1
    } else {
        isActive = false
        timeRemainingMin = defaultTimeRemainingMin
        showAlert = true
    }
}

【讨论】:

  • 非常感谢您的澄清!非常感谢。这创造了奇迹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 2018-10-18
相关资源
最近更新 更多