swift封装AFNetworking(block,rac)

闲来无聊,研究了一下swift,顺便写了个网络请求类来练练手。

import UIKit
import AFNetworking
import Result
import ReactiveSwift

enum request_type: Int {
    case GET = 0
    case POST = 1
}

class RequestManager: AFHTTPSessionManager {
    static let instance: RequestManager = {
        let instance = RequestManager()
        instance.requestSerializer = AFHTTPRequestSerializer()
        instance.responseSerializer = AFHTTPResponseSerializer()
        instance.responseSerializer.acceptableContentTypes = ["text/html","application/json","text/plain"]
        return instance
    }()
    //function rac
    func netRequest(type:request_type,url:String,param:[String:Any]?) -> Signal<Any, NoError> {
        let (signal,observer) = Signal<Any, NoError>.pipe()
        let success = { (task: URLSessionDataTask, json: Any)->() in
            let data = json as? Data
            let str:String = String(data: data!, encoding: String.Encoding.utf8)! as String
            observer.send(value: str )
            observer.sendCompleted()
        }
        let failure = { (task: URLSessionDataTask?, error: Error) -> () in
            print("网络请求错误 \(error)")
            observer.send(value: error)
            observer.sendCompleted()
        }
        guard type == .GET else {
            post(url, parameters: param, progress: nil, success: success, failure: failure)
            return signal
        }
        get(url, parameters: param, progress: nil, success: success, failure: failure)
        return signal
    }
    //function block
    func request(type: request_type, url: String, param: [String: AnyObject]?, completion: @escaping (AnyObject?) -> ()) {
        let success = { (task: URLSessionDataTask, json: Any)->() in
            let data = json as? Data
            let str:String = String(data: data!, encoding: String.Encoding.utf8)! as String
            completion(str as AnyObject?)
        }
        let failure = { (task: URLSessionDataTask?, error: Error) -> () in
            print("网络请求错误 \(error)")
            completion(nil)
        }

        if type == .GET {
            get(url, parameters: param, progress: nil, success: success, failure: failure)
        } else {
            post(url, parameters: param, progress: nil, success: success, failure: failure)
        }
    }
}

使用方式也挺简单

RequestManager.instance.netRequest(type: request_type.GET, url: url, param: nil).observeResult({ (result:Any) in
            print(result)
        })
        RequestManager.instance.request(type: request_type.GET, url: url, param: nil) { (json:AnyObject?) in
            print(json ?? "")
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,025评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,198评论 4 61
  • 从卫生间出来,穿过漫长的走廊,我回到了自己的座位。 窗外的风依旧呼呼地刮着,丝毫没有停歇的意思,车顶的灯慢节奏地闪...
    八柯阅读 548评论 9 7
  • 最近很流行的一句话反鸡汤的神谕:不努力一下,你都不知道自己有多弱。但是真正努力的人手头事情一件接一件,恨不得一个小...
    唐诗远打草稿小号阅读 352评论 0 1
  • 又开启剁手模式,现在偏好复古风。
    念念1999阅读 505评论 0 2