Swift_网络类简单封装

Swift
//
//  NetworkTools.swift
//  AFNetWorking的封装
//
//  Created by HarrySun on 2017/8/3.
//  Copyright © 2017年 Mobby. All rights reserved.
//

import AFNetworking

// 定义枚举类型(可以使Int类型/String类型)
enum RequestType:String{
    case GET = "GET"
    case POST = "POST"
}

class NetworkTools: AFHTTPSessionManager {
    // 创建单例
    // let是线程安全的
    static let shareInstance : NetworkTools = {
       
        let tools = NetworkTools()
        tools.responseSerializer.acceptableContentTypes?.insert("text/html")
        tools.responseSerializer.acceptableContentTypes?.insert("text/plain")
        return tools
    }()
}


// MARK:- 封装请求方法
extension NetworkTools{
    
    func request(methodType:RequestType, urlString:String, parameters:[NSString:Any], finished: @escaping (_ result:Any?,_ error:Error?)->()){
        
        
        // 1.定义成功的回调闭包
        let successCallBack = { (task : URLSessionDataTask, result:Any) in
            finished(result, nil)
        }
        
        // 2.定义失败的回调闭包
        let failureCallBack = { (task:URLSessionTask?, error:Error) in
            finished(nil, error)
        }
        
        // 3.发送网络请求
        if methodType == .GET {
            get(urlString, parameters: parameters, progress: nil, success: successCallBack, failure: failureCallBack)
        }else{
            post(urlString, parameters: parameters, progress: nil, success: successCallBack, failure: failureCallBack)
        }
    }
}
以下是接口的封装
// MARK:- 请求AccessToken
extension NetworkTools{
    
    func loadAccessToken(code : String, finished : @escaping (_ result : [String :  Any]?, _ error : Error?) -> ()){
        // 1.获取请求的URLString
        let urlString = "https://api.weibo.com/oauth2/access_token"
        // 2.获取请求的参数
        let parameters = ["client_id" : app_key, "client_secret" : App_Secret, "grant_type" : "authorization_code", "redirect_uri" : redirect_uri, "code" : code]
        // 3.发送网络请求
        request(methodType: .POST, urlString: urlString, parameters: parameters as [NSString : Any]) { (result, error) in
            finished(result as? [String : Any], error)
        }
    }
}

// MARK:- 请求用户的信息
extension NetworkTools {
    
    func loadUserInfo(access_token : String,uid:String, finished : @escaping ( _ result : [String : Any]?,_ error:Error?) -> ()){
        let urlString = "https://api.weibo.com/2/users/show.json"
        let parameters = ["access_token" : access_token,"uid" : uid]
        request(methodType: .GET, urlString: urlString, parameters: parameters as [NSString : Any]) { (result, error) in
            finished(result as? [String : Any], error)
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,576评论 25 709
  • 1.接口基础回顾 设计模式六大原则,其中依赖倒转原则,强调我们应该面向接口编程,那什么是接口?接口的作用? 接口如...
    孟婆汤不解渴阅读 4,310评论 0 3
  • “3年前”?我都在做什么呢?让我想想…… 额,三年前我刚研究生毕业,研究生二年级的时候跟老公结婚,并且提前把毕业论...
    云蕾阅读 3,552评论 5 6
  • 对于初学者来说,挤娃娃挺好画的,但是有的时候会掌握不好线条的形状,今天的临摹感觉重心有点偏 会继续坚持的哟
    熄灯冻土阅读 1,373评论 0 1
  • 一、分析界面信息 用户心理模型分析: 1.这是关于什么的界面?2.哪种用户使用?使用目的是什么?怎么操作?3.使用...
    叶竺阅读 2,688评论 0 0

友情链接更多精彩内容