如何使用单例类中枚举的状态在 Swift UI 的视图中触发警报

问题描述 投票:0回答:2

假设一个单例类具有有关登录状态的枚举,如下所示:

@Published var loginState: LoginState = .unknown

单例类实例在视图中被指定为

@ObservedObject
,以获取其他
@Published
变量的更改,如下所示:

struct LoginView: View {
    @ObservedObject var loginDelegate = Singleton.shared

当单例

loginState
设置为特定枚举情况(例如
.error
)时,如何使用类似以下内容在视图中触发警报?

}.alert(isPresented: <something> ) { ... }
swift swiftui
2个回答
9
投票

尝试以下方法

}.alert(isPresented: .constant(loginDelegate.loginState == .error)) { ... }

但是您需要在警报关闭按钮操作中将

loginDelegate.loginState
重置回
.unknown
,否则警报可能会立即重新出现。


0
投票

实现此目的的最佳方法是使用自定义绑定。为什么它比将枚举包装在常量中更好?因为当警报解除时会调用绑定设置。

更新 setter 中的状态枚举,以后由于忘记更新每个回调中的状态而引入错误的可能性会较小

    public var body: some View {
        let alertIsPresentedBinding = Binding<Bool>(
            get: {
                switch self.viewModel.state {
                case .error:
                    return true
                default:
                    return false
                }
            },
            set: {
                if $0 == false {
                    self.viewModel.state = .idle
                }
            }
        )
        Stack {
            ...
        }
        .alert("Title", isPresented: alertIsPresentedBinding, actions: {})
    }
© www.soinside.com 2019 - 2024. All rights reserved.