我有一个在所有视图模型中使用的加载指示器类,我想做的是独立跟踪每个API的加载状态,而不是为整个VM设置一个加载标志。
我有一个超类,它是一个可观察的对象,它具有每个虚拟机所需的所有公共属性,我还有一个 @Obervable (新宏),它是一个加载指示器,如果我不使用组合,视图就会更新一旦一切都按预期工作,但是 UI 不会收到更改通知,因为它是可观察对象内的可观察对象(超类),并且当我添加组合时,它会不断循环。我还尝试将 ObservableObject 类迁移到 Observable,相同的加载指示器类导致无限渲染。
下面是代码
加载指示器
class LoadingIndicatorVM<T: Hashable>: ObservableObject {
@Published var loadingStates: [T: Bool] = [:]
@Published var indicatorId: UUID = UUID()
// Method to update the loading state externally
internal func updateLoadingState(for apiDictionary: T, isLoading: Bool) {
loadingStates[apiDictionary] = isLoading
}
// Method to retrieve the loading state for a specific API
func isLoading(for apiDictionary: T) -> Bool {
let currentState = loadingStates[apiDictionary] ?? false
if !currentState {
indicatorId = UUID()
}
return currentState
}
func isLoading() -> Bool {
loadingStates.values.contains(true)
}
}
这是超级班
class ViewModelObject<T: Hashable, DataType>: ObservableObject {
// props
var cancellable : AnyCancellable?
@Published var loading = LoadingIndicatorVM<T>() <-- problem comes from this
@Published var data: [DataType] = []
let manager = NetworkManager()
// rest
}
任何帮助或见解将不胜感激!谢谢你
问题不在于可观察类,我的自定义滚动查看器用于在每个渲染上生成 Id,导致视图无限重新渲染。