使用 SwiftUI 在条件内显示警报

Posted

技术标签:

【中文标题】使用 SwiftUI 在条件内显示警报【英文标题】:Display an Alert inside a conditional with SwiftUI 【发布时间】:2019-09-01 04:25:12 【问题描述】:

我知道Alert 可以作为Button 的函数呈现,但Alert 可以在条件内呈现吗?如:

struct ContentView: View 

    var body: some View 
        Text("Hello World!")
    
    

if isValid 

    //present alert
    let alert = UIAlertController(title: "My Title", message: "This 
    is my message.", preferredStyle: UIAlertController.Style.alert)

    alert.addAction(UIAlertAction(title: "OK", style: 
    UIAlertAction.Style.default, handler: nil))

    self.present(alert, animated: true, completion: nil)

这样我就明白了

'ContentView' 类型的值没有成员'present'

【问题讨论】:

【参考方案1】:

我不确定你为什么要使用 UIKit。下面是一个示例,说明当某物更改标志时如何显示警报。在这种情况下,一个两秒的计时器:

import SwiftUI

class MyModel: ObservableObject 
    @Published var isValid: Bool = false

    init() 
        DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2)) 
            self.isValid = true
        
    


struct ContentView: View 
    @ObservedObject var model: MyModel = MyModel()

    var body: some View 
        VStack 
            Text("Some text")
            Text("Some text")
            Text("Some text")
            Text("Some text")
        .alert(isPresented: $model.isValid, content: 
            Alert(title: Text("Title"),
                  message: Text("Message"),
                  dismissButton: .default(Text("OK"))  print("do something") )
        )
    

【讨论】:

我一直在尝试做同样的事情,除了在一个不同的 swift 类和 final 类中。当我直接调用绑定时,ui不会改变(没有警报)但是当我在视图中创建一个状态时,并且在我的按钮操作中将状态分配给observerdObj中的绑定,它可以工作,但是我认为这不是用例。有什么建议吗?

以上是关于使用 SwiftUI 在条件内显示警报的主要内容,如果未能解决你的问题,请参考以下文章

使用 MVVM 在 SwiftUI 中显示警报

SwiftUI MapKit UIViewRepresentable 无法显示警报

在 swiftui 不工作的警报后显示确认警报

SwiftUI 基于计算属性显示警报

SwiftUI 中的全局警报

如何在没有按钮的 SwiftUI 中显示警报