为何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
相关产品推荐
相关产品推荐

