版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/grl18840839630/article/details/81427981
一、创建AFnetworking桥接文件:
-
Github里面down下来AFNetworking的压缩包,解压缩然后将里面的AFNetworking和UIKit+AFNetworking这两个文件夹直接拖进去要用的那个工程里面去。
-
在Build Phrases下的Compile Sources添加所有导入的.m文件。我在实际操作中没做到这步,因为我把文件夹拖进去之后,貌似Xcode就帮忙把这步做好了。
-
同样在Build Phrases下的 Link Binary With Libraries 添加MobileCoreServices.framework、Security.framework、SystemConfiguration.framework这三个文件。
-
创建"工程名-Bridging-Header.h"的文件,因为是在Swift工程中用到OC的代码,所以要进行这个桥接的工作。在这个文件里面用#import "xx.h"这样来包含我们刚刚放进来那些文件的头文件,所有都要。
-
写好这个桥接头文件之后,在工程的 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)
}
}
}