如何根据 class 中的错误在 ContentView 中显示警报

How to show alert in ContentView based on error in class

我 class 处理一些 CoreData 的东西

class GenreData: NSObject {

var genreID: Int = 0
var genreName: String = ""

@Published var isError = false

func getGenreName() -> String {
    
    let request = NSFetchRequest<NSManagedObject>(entityName: "Genres")
    request.predicate = NSPredicate(format: "genID == \(genreID)")
    var genre = [NSManagedObject]()
    
    do {
        try genre = context.fetch(request)
    } catch let error {
        isError = true            
        print(error.localizedDescription)
    }
    
    return genre.first!.value(forKey: "genName") as! String
}
}

并且我想知道如何在 class 中发生错误时在我的 ContentView 中启动警报。

.alert(isPresented: $isError, content: {
            Alert(title: Text(alertTitle), message: Text(alertMessage), dismissButton: .default(Text(alertButton1)))
        })
.alert(isPresented: $objGenre.dataError, content: {
           Alert(title: Text(alertTitle), message: Text(alertMessage), dismissButton: .default(Text(alertButton1)))
        })
.alert(isPresented: $deleteAlert, content: {
            Alert(title: Text(alertTitle), message: Text(alertMessage), primaryButton: .destructive(Text(alertButton1)) {
                objGenre.deleteGenre()
                objGenre.genreID = 0
                selectedGenreName = ""
            }, secondaryButton: .cancel(Text(alertButton2)))
        })

我在 ContentView 中将 class 设置为 @ObservableObject objGenre 并在 class 中声明了 @Published var isError 但即使 isError 设置为 true 也不会显示警报。

你的 GenreData class 需要符合 ObservableObject 协议,你需要在你的视图中使用 [=12] 的 属性 包装器对其进行强引用=].这将使已发布的 属性 能够更新视图状态并显示警报。如果您想了解 SwiftUI..

中的警报,本文是一个很好的起点

https://medium.com/better-programming/alerts-in-swiftui-a714a19a547e