Swift4.0中AFNetworking的桥接和使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/grl18840839630/article/details/81427981

一、创建AFnetworking桥接文件:

  1. Github里面down下来AFNetworking的压缩包,解压缩然后将里面的AFNetworking和UIKit+AFNetworking这两个文件夹直接拖进去要用的那个工程里面去。

  2. 在Build Phrases下的Compile Sources添加所有导入的.m文件。我在实际操作中没做到这步,因为我把文件夹拖进去之后,貌似Xcode就帮忙把这步做好了。

  3. 同样在Build Phrases下的 Link Binary With Libraries 添加MobileCoreServices.framework、Security.framework、SystemConfiguration.framework这三个文件。

  4. 创建"工程名-Bridging-Header.h"的文件,因为是在Swift工程中用到OC的代码,所以要进行这个桥接的工作。在这个文件里面用#import "xx.h"这样来包含我们刚刚放进来那些文件的头文件,所有都要。

  5. 写好这个桥接头文件之后,在工程的 Build Setting 条目下的 Swift Compiler - General 中配置 Objective-C Bridging Header 写好是刚刚那个"工程名-Bridging-Header.h",把这个名字填上去。(如果你的项目还要在OC的文件下调用Swift的方法的话,还要在Objective-C Generated Interface Header Name 里配置成"工程名-Swift.h",这个"ProjectName-Swift.h"由系统生成,你也可以用command+鼠标单击来进入那个文件来看里面什么样子)

2、实现AFnetworking单例:

    //单例:
    static let shared:NetworkManager = {
        let instence = NetworkManager()
        instence.requestSerializer = AFJSONRequestSerializer()
        instence.responseSerializer = AFHTTPResponseSerializer()
        instence.requestSerializer.setValue("application/json,text/html", forHTTPHeaderField: "Accept")
        instence.requestSerializer.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
        return instence
    }()

3、实现AFnetworking的请求方式封装:

import UIKit
//请求类型:
enum HTTPRequestType {
    case GET
    case POST
}
class NetworkManager: AFHTTPSessionManager {
    //单例:
    static let shared:NetworkManager = {
        let instence = NetworkManager()
        instence.requestSerializer = AFJSONRequestSerializer()
        instence.responseSerializer = AFHTTPResponseSerializer()
        instence.requestSerializer.setValue("application/json,text/html", forHTTPHeaderField: "Accept")
        instence.requestSerializer.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
        return instence
    }()
    
    func request(requestType:HTTPRequestType,urlString:String,parameters:[String:AnyObject]?,complated:@escaping(AnyObject?)->()){
        
        let success = {
            (tasks:URLSessionDataTask,json:Any) ->() in complated(json as AnyObject?)
        }
        let failure = {
            (tasks:URLSessionDataTask?,error:Error) ->() in complated(nil)
        }
        
        if requestType == .GET {
            get(urlString, parameters: parameters, progress: nil, success: success, failure: failure)
        }else{
            self.post(urlString, parameters: parameters, progress: nil, success: success, failure: failure)
        }
    }
}

猜你喜欢

转载自blog.csdn.net/grl18840839630/article/details/81427981