Files
e-party-iOS/yana/Features/InitFeature.swift
edwinQQQ 3d00e459e3 feat: 更新文档和视图以支持iOS 17及优化用户体验
- 更新Yana项目文档,调整适用版本至iOS 17,确保与最新开发环境兼容。
- 在多个视图中重构代码,优化状态管理和视图逻辑,提升用户体验。
- 添加默认初始化器以简化状态管理,确保各个Feature的状态一致性。
- 更新视图组件,移除不必要的硬编码,增强代码可读性和维护性。
- 修复多个视图中的逻辑错误,确保功能正常运行。
2025-07-29 17:57:42 +08:00

68 lines
1.9 KiB
Swift

import Foundation
import ComposableArchitecture
@Reducer
struct InitFeature {
@ObservableState
struct State: Equatable {
var isLoading = false
var response: InitResponse?
var error: String?
init() {
//
}
}
enum Action: Equatable {
case initialize
case initializeResponse(TaskResult<InitResponse>)
}
@Dependency(\.apiService) var apiService
var body: some ReducerOf<Self> {
Reduce { state, action in
switch action {
case .initialize:
state.isLoading = true
state.error = nil
return .run { send in
let request = InitRequest()
await send(.initializeResponse(
TaskResult {
try await apiService.request(request)
}
))
}
case let .initializeResponse(.success(response)):
state.isLoading = false
state.response = response
return .none
case let .initializeResponse(.failure(error)):
state.isLoading = false
if let apiError = error as? APIError {
state.error = apiError.localizedDescription
} else {
state.error = error.localizedDescription
}
return .none
}
}
}
}
// MARK: - Init API Request
struct InitRequest: APIRequestProtocol {
typealias Response = InitResponse
var endpoint: String { APIEndpoint.config.path }
var method: HTTPMethod { .GET }
var queryParameters: [String: String]? { nil }
var bodyParameters: [String: Any]? { nil }
var timeout: TimeInterval { 15.0 }
}