用Swift一步步教你封装--AFNetworking

首先怎么下载框架我这里就不说了,进入正题!


首先创建一个NewworkingTools文件

import AFNetworking
//定义枚举类型
enum RequestType : String {
    case GET = "GET"
    case POST = "POST"
}
class NetworkTools: AFHTTPSessionManager {
   //单例 
    static let shareInstance :NetworkTools = {
       
        let tools = NetworkTools()
        //这是给JSON序列化加一个格式
        tools.responseSerializer.acceptableContentTypes?.insert("text/html")
        return tools
    }()
   
}
// MARK:- 封装请求方法
extension NetworkTools {
        
    
    func request(methodType : RequestType , urlString : String,parameters :[String : AnyObject],failure :(result : AnyObject? , error : NSError?) -> ()) {
        //判断是那种请求 GET
        if methodType == .GET{
            GET(urlString, parameters: parameters, progress: nil, success: { (stak : NSURLSessionDataTask ,result : AnyObject?) -> Void in
                print(result)
                }, failure: { (task :NSURLSessionDataTask?, error:NSError?) -> Void in
            })
        }
        else //POST
        {
            POST(urlString, parameters: parameters, progress: nil, success: { (stak : NSURLSessionDataTask, result : AnyObject?) -> Void in
                
                }, failure: { (task : NSURLSessionDataTask?, error : NSError?) -> Void in
                })
        }
   }
}
    
    
}

现在可以在外面试着调用了

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        NetworkTools.shareInstance.request(.GET, urlString: "http://httpbin.org/get", parameters: ["name":"MarkTang"]) { (result, error) -> () in
   
        }
    }
    

如果你没有改配置的话,会出现以下错误

Snip20160407_1.png

你需要需要以下info的配置,因为是可能是https

Snip20160407_3.png

再次运行,你会拿到类似于以下数据

Snip20160407_4.png

接下来在继续优化一下代码

// MARK:- 封装请求方法
extension NetworkTools {
    
    
    func request(methodType : RequestType , urlString : String,parameters :[String : AnyObject],failure :(result : AnyObject? , error : NSError?) -> ()) {
        
        //1.定义成功回调的闭包
        let successCallBack = { (stak : NSURLSessionDataTask ,result : AnyObject?) -> Void in
            //把闭包传出去
            failure(result: result, error: nil)
        
        }
        //2.定义失败的回调闭包
        let failureCallBack = { (stak : NSURLSessionDataTask? ,error : NSError?) -> Void in
            //把闭包传出去
            failure(result: nil, error: error)
            
        }
        
        //3.判断是那种请求 GET 发送请求
        if methodType == .GET{
            GET(urlString, parameters: parameters, progress: nil, success: successCallBack, failure: failureCallBack)
        }
        else //POST
        {
            POST(urlString, parameters: parameters, progress: nil, success: successCallBack, failure: failureCallBack)
        }
   }

}

//在外面可以拿到返回的值
 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        NetworkTools.shareInstance.request(.GET, urlString: "http://httpbin.org/get", parameters: ["name":"MarkTang"]) { (result, error) -> () in
            if error != nil {
                print(error)
                return
            }
            
            print(result)
         }
    }

再跑一下,可以返回参数,好了这就是最简单的封装了,下次再见,如果有疑问可以在下面回复,我看到会及时回复!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,573评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,973评论 6 342
  • 感情需要沉淀,生活需要历练,疗伤需要时间,这些道理我们都懂,写成文字也很轻松,可是一旦落实在生活中,却没那么简...
    一生如燕阅读 397评论 0 1
  • 到了现在,觉得我的人生没有任何意义。 我时常觉得人生没有意义,特别是最近。 再没有什么东西,让我很想要费力去追寻。...
    薄荷香阅读 323评论 0 0