Files
e-party-iOS/yana/Features/InitFeature.swift
edwinQQQ 007c10daaf feat: 添加Swift Package管理和API功能模块
新增Package.swift和Package.resolved文件以支持Swift Package管理,创建API相关文件(API.swift、APICaller.swift、APIConstants.swift、APIEndpoints.swift、APIService.swift、APILogger.swift、APIModels.swift、Integration-Guide.md)以实现API请求管理和网络交互功能,增强项目的功能性和可扩展性。同时更新.gitignore以排除构建文件和临时文件。
2025-06-04 17:25:21 +08:00

64 lines
1.8 KiB
Swift

import Foundation
import ComposableArchitecture
@Reducer
struct InitFeature {
@ObservableState
struct State: Equatable {
var isLoading = false
var response: InitResponse?
var error: String?
}
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 }
}