import Foundation import ComposableArchitecture @Reducer struct SettingFeature { @ObservableState struct State: Equatable { var userInfo: UserInfo? var accountModel: AccountModel? var isLoading = false var error: String? } enum Action: Equatable { case onAppear case loadUserInfo case userInfoLoaded(UserInfo?) case loadAccountModel case accountModelLoaded(AccountModel?) case logoutTapped case logout case dismissTapped } var body: some ReducerOf { Reduce { state, action in switch action { case .onAppear: return .concatenate( .send(.loadUserInfo), .send(.loadAccountModel) ) case .loadUserInfo: let userInfo = UserInfoManager.getUserInfo() return .send(.userInfoLoaded(userInfo)) case let .userInfoLoaded(userInfo): state.userInfo = userInfo return .none case .loadAccountModel: let accountModel = UserInfoManager.getAccountModel() return .send(.accountModelLoaded(accountModel)) case let .accountModelLoaded(accountModel): state.accountModel = accountModel return .none case .logoutTapped: return .send(.logout) case .logout: state.isLoading = true // 清除所有认证数据 UserInfoManager.clearAllAuthenticationData() // 发送通知返回登录页面 NotificationCenter.default.post(name: .homeLogout, object: nil) return .none case .dismissTapped: // 发送关闭设置页面的通知 NotificationCenter.default.post(name: .settingsDismiss, object: nil) return .none } } } } // MARK: - Notification Extension extension Notification.Name { static let settingsDismiss = Notification.Name("settingsDismiss") }