import CoreDomain import CoreModel import Observation @MainActor @Observable public final class HomeViewModel { public private(set) var uiState: HomeUiState = .loading private let homeUseCase: HomeUseCase private var loadTask: Task? public init(homeUseCase: HomeUseCase) { self.homeUseCase = homeUseCase } public func load() { // flatMapLatest 的等价:新 load 前先取消旧的观察。 loadTask?.cancel() loadTask = Task { [weak self] in guard let self else { return } self.uiState = .loading do { for try await data in self.homeUseCase.observeHome() { self.uiState = data.habits.isEmpty ? .empty : .success(data) } } catch is CancellationError { // 被更新的 load() 取代,保持当前状态即可。 } catch { self.uiState = .error(error.localizedDescription) } } } }