## 网络层使用说明 该目录包含基于 Alamofire + Combine 的网络封装: - `AFNetwork.swift`:请求封装、拦截、错误处理、重试 - `APIService.swift`:统一接口入口,支持包裹/非包裹响应 - `NetworkModel.swift`:通用模型与配置 ### 1. 配置基础信息 ```swift APIService.shared.updateConfig( NetworkConfig( baseURL: "https://api.example.com", defaultHeaders: ["Accept": "application/json"], timeout: 30, successCodes: [0, 200] ) ) ``` ### 2. 设置鉴权 Token(可选) ```swift final class TokenProvider: AuthTokenProvider { var token: String? { "Bearer xxx.yyy.zzz" } } APIService.shared.setTokenProvider(TokenProvider()) ``` 当 `APIEndpoint.requiresAuth = true` 时,会自动在请求头加入 `Authorization`。 ### 3. 普通请求(返回原始模型) ```swift struct UserInfo: Decodable { let id: String let name: String } let endpoint = APIEndpoint( path: "/user/info", method: .get, parameters: ["userId": "1001"], encoding: URLEncoding.default, requiresAuth: true ) APIService.shared.request(endpoint) .sink(receiveCompletion: { completion in if case let .failure(error) = completion { print("请求失败: \(error)") } }, receiveValue: { (model: UserInfo) in print("用户信息: \(model)") }) ``` ### 4. 包裹响应(code/message/data) 后端返回结构示例: ```json { "code": 0, "message": "ok", "data": { "id": "1001", "name": "Tom" } } ``` 调用方式: ```swift APIService.shared.requestWrapped(endpoint) .sink(receiveCompletion: { completion in if case let .failure(error) = completion { print("请求失败: \(error)") } }, receiveValue: { (model: UserInfo) in print("用户信息: \(model)") }) ``` ### 5. 常见错误说明 `NetworkError` 说明: - `invalidURL`:URL 不合法 - `encodingFailed`:参数编码失败 - `decodingFailed`:响应解码失败 - `serverError`:服务端/业务错误 - `network`:网络错误(超时、断网) - `unknown`:未知错误