You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何ErrorableView无法响应@Published属性的变更?

代码无法响应@Published属性变更的解决方案疑问

我遇到了代码无法响应@Published属性变更的问题,相关代码如下:

protocol ErrorableViewProtocol: View {
    var error: Error? { get set }
}

class ObservableError: ObservableObject {
    @Published var error: Error?
}

struct ErrorableView<T: ErrorableViewProtocol>: View {
    var errorable: T
    
    var body: some View {
        if let error = errorable.error {
                       // 如何修改这里,让ErrorableView响应该属性的变更并重新构建?使用示例见下方
            ErrorView(error: error)
        } else {
            errorable
        }
    }
}

使用示例如下:

struct SearchMediaView: View, ErrorableViewProtocol {
    @StateObject var observable_error: ObservableError = ObservableError()
    @State var errorAccessAllowed = false // 用于规避烦人的警告
    var error: Error? {
        get {
            if !errorAccessAllowed {
                return nil
            }
            return observable_error.error
        }
        set {
            observable_error.error = newValue
        }
    }
  ...

已知Swift协议中不支持属性包装器要求,想请教:如果无法使用可观察属性,能否通过KVO将body与该属性绑定,从而让ErrorableView重新构建?


内容的提问来源于stack exchange,提问作者Anton Tropashko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:45:32