
- 将MeDynamicFeature重命名为MeFeature,并在MainFeature中进行相应更新。 - 更新MainFeature的状态管理,整合用户动态相关逻辑。 - 新增MeFeature以管理用户信息和动态加载,提升代码结构清晰度。 - 更新MainView和MeView以适应新的MeFeature,优化用户体验。 - 删除冗余的MeDynamicView,简化视图结构,提升代码可维护性。
58 lines
1.7 KiB
Swift
58 lines
1.7 KiB
Swift
import Foundation
|
|
import ComposableArchitecture
|
|
import CasePaths
|
|
|
|
struct MainFeature: Reducer {
|
|
enum Tab: Int, Equatable, CaseIterable {
|
|
case feed, other
|
|
}
|
|
|
|
struct State: Equatable {
|
|
var selectedTab: Tab = .feed
|
|
var feedList: FeedListFeature.State = .init()
|
|
var me: MeFeature.State = .init()
|
|
var accountModel: AccountModel? = nil
|
|
}
|
|
|
|
@CasePathable
|
|
enum Action: Equatable {
|
|
case onAppear
|
|
case selectTab(Tab)
|
|
case feedList(FeedListFeature.Action)
|
|
case me(MeFeature.Action)
|
|
case accountModelLoaded(AccountModel?)
|
|
}
|
|
|
|
var body: some ReducerOf<Self> {
|
|
Scope(state: \.feedList, action: \.feedList) {
|
|
FeedListFeature()
|
|
}
|
|
Scope(state: \.me, action: \.me) {
|
|
MeFeature()
|
|
}
|
|
Reduce { state, action in
|
|
switch action {
|
|
case .onAppear:
|
|
return .run { send in
|
|
let accountModel = await UserInfoManager.getAccountModel()
|
|
await send(.accountModelLoaded(accountModel))
|
|
}
|
|
case .selectTab(let tab):
|
|
state.selectedTab = tab
|
|
if tab == .other, let uidStr = state.accountModel?.uid, let uid = Int(uidStr), uid > 0 {
|
|
state.me = MeFeature.State(uid: uid)
|
|
return .send(.me(.onAppear))
|
|
}
|
|
return .none
|
|
case .feedList:
|
|
return .none
|
|
case let .accountModelLoaded(accountModel):
|
|
state.accountModel = accountModel
|
|
return .none
|
|
case .me:
|
|
return .none
|
|
}
|
|
}
|
|
}
|
|
}
|