RXSWift-RxAlamofire 的使用和封装

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的学习有很大帮助

最近的文章

用AVFoundation实现二维码扫描

首先对AVFoundation的了解(指我的了解因为我能力有限所以可能有不到位的地方)AVFoundation是一个可以用来使用和创建基于时间的视听媒体的框架,例如:您可以用它来检查,创建,编辑或是重新编码媒体文件。也可以从设备中获取输入流,在视频实时播放时操作和回放。下图时AVFoundation …

于 继续阅读
更早的文章

Swift中柯里化

####Swift中的柯里化 1.Swift 里可以将方法进行柯里化 (Currying),这是也就是把接受多个参数的方法进行一些变形,使其更加灵活的方法。函数式的编程思想贯穿于 Swift 中,而函数的柯里化正是这门语言函数式特点的重要表现。curry 是 Swift 中一个很灵活的特性,用最 …

于 继续阅读