OOResult.swift 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. //
  2. // OOResult.swift
  3. // o2app
  4. //
  5. // Created by 刘振兴 on 2017/8/24.
  6. // Copyright © 2017年 zone. All rights reserved.
  7. //
  8. import Foundation
  9. import HandyJSON
  10. import Moya
  11. import Result
  12. public final class OOResult<T:BaseModel> {
  13. var model:T?
  14. var error:OOAppError?
  15. fileprivate var sourceError:Swift.Error?
  16. init(_ result:Result<Response,MoyaError>) {
  17. switch result {
  18. case .success(let resp):
  19. self.model = resp.mapObject(T.self)
  20. if let _ = model {
  21. if model?.isSuccess() == false {
  22. self.error = OOAppError.common(type: "APPError", message: model?.message ?? "", statusCode: 10001)
  23. }
  24. }else{
  25. self.error = OOAppError.common(type: "systemError", message: "转换出错", statusCode: 10001)
  26. }
  27. break
  28. case .failure(let err):
  29. self.sourceError = err
  30. transError()
  31. break
  32. }
  33. }
  34. func isResultSuccess() -> Bool {
  35. guard let _ = error else {
  36. return true
  37. }
  38. return false
  39. }
  40. fileprivate func transError() {
  41. guard let err = self.sourceError else {
  42. return
  43. }
  44. if err is MoyaError {
  45. let mErr = err as! MoyaError
  46. switch mErr {
  47. case .imageMapping(let resp):
  48. self.error = OOAppError.imageMapping(message: mErr.errorDescription!, statusCode: (mErr.response?.statusCode)!, data: resp.data)
  49. break
  50. case .jsonMapping(let resp):
  51. self.error = OOAppError.jsonMapping(message: mErr.errorDescription!, statusCode: (mErr.response?.statusCode)!, data: resp.data)
  52. break
  53. case .requestMapping(let str):
  54. self.error = OOAppError.requestMapping(str)
  55. break
  56. case .statusCode(let resp):
  57. self.error = OOAppError.statusCode(message: mErr.errorDescription!, statusCode: (mErr.response?.statusCode)!, data: resp.data)
  58. break
  59. case .stringMapping(let resp):
  60. self.error = OOAppError.stringMapping(message: mErr.errorDescription!, statusCode: (mErr.response?.statusCode)!, data: resp.data)
  61. break
  62. case .underlying(let uErr):
  63. self.error = OOAppError.underlying(uErr.0 as! Error)
  64. break
  65. case .objectMapping(let err,let resp):
  66. self.error = OOAppError.objectMapping(err, resp)
  67. break
  68. case .encodableMapping(let err):
  69. self.error = OOAppError.encodableMapping(err)
  70. break
  71. case .parameterEncoding(let err):
  72. self.error = OOAppError.parameterEncoding(err)
  73. break
  74. }
  75. }
  76. }
  77. }