当用户输入的时间低于预期时间时,如何在 swiftUI 中显示警报消息?

How to show alert message in swiftUI when user enters time below the expected time?

我正在构建一个类似闹钟的应用程序,我只想在用户输入的时间低于 2 小时时显示一条弹出消息(警报消息),用户应该通过这样的方式收到一条消息:“请输入更多时间持续时间超过 2 小时。

这是我存储报警值的地方

myViewModel.myModel.waketime

我想在用户单击下面的图片时显示消息

 Image(systemName: "checkmark.circle")
                        .resizable()
                        .aspectRatio(contentMode: .fit)
                        .clipShape(Circle())
                        .sheet(isPresented: $showPlayer) {
                            SecondView()
                        }

这是用户选择闹钟时间的另一个视图

 Text("Alarm : ")
  .font(.body)
   Spacer()
   DatePicker("", selection: self.$myViewModel.myModel.waketime, displayedComponents: .hourAndMinute)

请帮我解决这个问题!!

您可以使用 Alert 向用户显示提醒。为了在用户单击 Image 时执行此操作,您可能希望将其包装在 Button:

struct ContentView : View {
    @State var alertShown = false
    
    var body: some View {
        Button(action: {
            if true { //here, you can check your condition for whether the alert should get triggered -- like checking `myViewModel.myModel.waketime > x`
                alertShown = true
            }
        }) {
            Image(systemName: "checkmark.circle")
                .resizable()
                .aspectRatio(contentMode: .fit)
                .clipShape(Circle())
        }.alert(isPresented: $alertShown) {
            Alert(title: Text("Please enter time more than 2 hours of duration"))
        }
    }
}

如果您不希望将项目中的 Image 更改为 accentColor,您可能需要添加 .buttonStyle(PlainButtonStyle()) 作为 Button 的修饰符.

更新回复评论: 您想要做的一般检查是:

if myViewModel.myModel.waketime.timeIntervalSince1970 - Date().timeIntervalSince1970 < 60 * 60 * 2 {

但是,请注意,根据您当前仅显示小时和分钟的策略,这将在午夜前 2 小时开始失败,因为 DatePicker 将默认为当前日期,即凌晨 1 点,例如,注册为 before 当前 date/time,而不是之后。因此,您需要添加一些额外的逻辑来解决此类问题。例如,您可以在当前日期之前的任何时间添加 24 小时。