RXSWift-RxAlamofire 的使用和封装
######首先对RxAlamofire的介绍 :RxAlamofire是包装优雅的HTTP网络迅速Alamofire的RxSwift的扩展版。
1.介绍RxAlamofire github的readme提供的几种方法具体不展开 请自己看https://github.com/RxSwiftCommunity/RxAlamofire
2.自己工程的请求
1.对返回格式的规范 因为如果请求错误或者失败不能信号发送error
enum Result<T> {
case Success(T)
case Failure(ErrorType)
}
enum FailureType:ErrorType {
case Failed(message: String,code:Int)
var message : String{
if case .Failed(let m, _) = self{
return m
}else{
return ""
}
}
}
2.这个请求单列
class Network {
static var shareIntance = Network()
var token: String?{
return "" //去用户取 UserDetail?.token
}
private init(){
}
func rx_request(method: Alamofire.Method,
_ URLString: URLStringConvertible,
parameters: [String: AnyObject]? = nil,
encoding: ParameterEncoding = .URL,
headers: [String: String]? = nil) -> Observable<Request>{
//加token
// parameters["token"] = self.token
var parame:Dictionary<String,AnyObject>? = nil
if (self.token != nil){
parame = ["token":self.token!]
}else{
parame = parameters
}
//加header 自己加
return Manager.sharedInstance.rx_request(method, URLString, parameters: parame, encoding: encoding, headers: headers)
}
}
3.正在的发出请求
extension Observable where Element :Request {
func rx_responseJSON()-> Observable<Result<JSON>> {
func anonymousErrorCatch(result:String?) throws -> JSON{
guard let result = result else{
throw FailureType.Failed(message: "返回数据为空", code: -1)
}
return JSON(result)
}
return self.flatMap { (request) -> Observable<Result<JSON>> in
let validatedRequest = request
.validate(statusCode: 200 ..< 300)
let stringPart = validatedRequest
.rx_string()
.map { d -> Result<JSON> in
do{
let json = try anonymousErrorCatch(d)
return Result.Success(json)
}catch{
return Result.Failure(error)
}
}
return stringPart
}
}
}
包着边研究边学习的看了RxAlamofire,我感觉也有人自己对Alamofire进行RxSwift的扩展 但是我感觉应该这个是最好的 值得一看 对你用RxSwift 自己去扩展一些自己的库或者别人没写的苦进行扩展 还有对RxSwift的学习有很大帮助