RequestError.swift 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. //
  2. // RequestError.swift
  3. // SwiftBilibili
  4. //
  5. // Created by 罗文 on 2021/1/16.
  6. // Copyright © 2021年 罗文. All rights reserved.
  7. //
  8. import UIKit
  9. import RxSwift
  10. ///定义返回的JSON数据字段
  11. let RESULT_CODE = "code"//状态码
  12. let RESULT_MESSAGE = "msg"//错误消息提示
  13. let RESULT_DATA = "data"//数据包
  14. let RESULT_RESULT = "result"//数据包
  15. let RESULT_BODY = "body"//数据包
  16. let RESULT_OTHER = "other"//数据包
  17. let RESULT_TOTAL = "total"
  18. enum RequestError: Swift.Error {
  19. case noCodeKey
  20. case noDataKey
  21. case wrongData
  22. case sysError(statusCode: String?, errorMsg: String?)
  23. }
  24. extension RequestError {
  25. var errorDescription: String {
  26. switch self {
  27. case .noCodeKey,.noDataKey,.wrongData:
  28. return "解析数据错误"
  29. case .sysError(_, let errorMsg):
  30. return errorMsg ?? "无错误信息"
  31. }
  32. }
  33. }
  34. enum StatusCode: Int {
  35. case success = 200
  36. case unknow
  37. }
  38. extension Single {
  39. func handleError(_ element: Element? = nil,
  40. showText:String = "似乎与互联网断开连接",
  41. bottomOffset:CGFloat = kToastBottomCenterSpace
  42. ) -> Single<Element> {
  43. if let element = element {
  44. return self.asObservable().catchErrorJustReturn(element).asSingle()
  45. }else {
  46. return self.asObservable().do(onError: { (error) in
  47. if error is RequestError {
  48. NYSwToaster.show((error as! RequestError).errorDescription)
  49. }else{
  50. NYSwToaster.show(showText,bottomOffsetPortrait:bottomOffset)
  51. }
  52. }).asSingle()
  53. }
  54. }
  55. }