NetworkManager.swift 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //
  2. // NetworkManager.swift
  3. // fiveConstant
  4. //
  5. // Created by 李建 on 2023/1/17.
  6. //
  7. import Foundation
  8. import Moya
  9. import HandyJSON
  10. import SwiftUI
  11. public class HttpRequest<M: Codable> {
  12. public class func loadData<T: TargetType>(target: T, success: @escaping ((_ returnData: M) -> Void), failure: @escaping ((Int?, String?) ->Void) = {code, msg in }) {
  13. let provider = MoyaProvider<T>(plugins: [
  14. networkPlugin,
  15. RequestHandlingPlugin(),
  16. NetworkLoggerPlugin(configuration: NetworkLoggerPlugin.Configuration(logOptions: .verbose))
  17. ])
  18. provider.request(target, completion: { result in
  19. switch result {
  20. case let .success(response):
  21. do {
  22. guard let json = try response.mapJSON() as? [String: Any] else {
  23. failure(-1, "不合法的响应数据")
  24. return
  25. }
  26. let decoder = JSONDecoder()
  27. let baseModel = try? decoder.decode(BaseModel<M>.self, from: response.data)
  28. guard baseModel != nil else {
  29. failure(json["code"] as? Int, json["message"] as? String)
  30. let msg = json["message"] as? String ?? "未知错误"
  31. let code = json["code"] as? Int
  32. HUD.show(title: msg)
  33. if code == 9999 || code == 401 {
  34. ProgressState.manager.isNeedLogin = true
  35. }
  36. return
  37. }
  38. if response.statusCode == 401 {
  39. // 跳转登录
  40. ProgressState.manager.isNeedLogin = true
  41. return
  42. }
  43. switch baseModel?.code {
  44. case 0:
  45. success((baseModel?.data)!)
  46. default:
  47. HUD.show(title: baseModel!.message)
  48. failure(baseModel?.code, baseModel?.message)
  49. }
  50. } catch {
  51. print(error)
  52. }
  53. case let.failure(error):
  54. failure(error.response?.statusCode, "请求出错")
  55. }
  56. })
  57. }
  58. }