RequestError.swift 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. enum RequestError: Swift.Error {
  18. case noCodeKey
  19. case noDataKey
  20. case wrongData
  21. case sysError(statusCode: String?, errorMsg: String?)
  22. }
  23. extension RequestError {
  24. var errorDescription: String {
  25. switch self {
  26. case .noCodeKey,.noDataKey,.wrongData:
  27. return "解析数据错误"
  28. case .sysError(_, let errorMsg):
  29. return errorMsg ?? "无错误信息"
  30. }
  31. }
  32. }
  33. enum StatusCode: Int {
  34. case success = 0
  35. case unknow
  36. }
  37. extension Single {
  38. func handleError(_ element: Element? = nil,
  39. showText:String = "似乎与互联网断开连接",
  40. bottomOffset:CGFloat = kToastBottomCenterSpace
  41. ) -> Single<Element> {
  42. if let element = element {
  43. return self.asObservable().catchErrorJustReturn(element).asSingle()
  44. }else {
  45. return self.asObservable().do(onError: { (error) in
  46. if error is RequestError {
  47. // BilibiliToaster.show((error as! RequestError).errorDescription)
  48. }else{
  49. // BilibiliToaster.show(showText,bottomOffsetPortrait:bottomOffset)
  50. }
  51. }).asSingle()
  52. }
  53. }
  54. }