public struct ApiResponse<T: Codable>: Codable {
public var code: Int
public var message: String?
public var data: T?
public var isSuccess: Bool {
return 200 ..< 300 ~= code
}
public init(code: Int = -100010, message: String? = nil, data: T? = nil) {
self.code = code
self.message = message
self.data = data
}
public static func onErrorRecover(_ err: Swift.Error)-> SharedSequence<DriverSharingStrategy, ApiResponse<T>> {
let __err = err as NSError
return Driver<ApiResponse<T>>.just(ApiResponse<T>(code: __err.code, message: __err.localizedDescription))
}
}
public extension Observable where Element: Any {
@discardableResult
func decode<T: Codable>(_ type: T.Type) -> Observable<T> {
return self.map { element -> T in
let decoder = JSONDecoder()
// 反序列化日期, 根据业务情况, 自行修改
decoder.dateDecodingStrategy = .iso8601
// 或者自定义, 参考`DateDecodingStrategy`
// let formatter = DateFormatter()
// formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
// decoder.dateDecodingStrategy = .custom({ decoder-> Date in
// let container = try decoder.singleValueContainer()
// let dateStr = try container.decode(String.self)
//
// let date = formatter.date(from: dateStr)
// return date!
// })
let data = try JSONSerialization.data(withJSONObject: element)
let result = try decoder.decode(T.self, from: data)
return result
}
}
}
用法
扩展
用法