使用 SwiftUI 在条件中显示警报

Aus*_*nyi 3 uikit uialertview swift uialertcontroller swiftui

我知道 anAlert可以作为 a 的函数呈现Button,但是 anAlert可以在条件中呈现吗?如:

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)
}
Run Code Online (Sandbox Code Playgroud)

有了这个我得到

“ContentView”类型的值没有成员“present”

kon*_*iki 6

我不确定你为什么使用 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") })
        })
    }
}
Run Code Online (Sandbox Code Playgroud)