1.
pod 'AFNetworking', '~> 3.1.0'
2.
创建网络请求工具 继承于NSObject
import AFNetworking
enum FMResult {
case FMData
case FMJSON
case FMXML
}
enum FMRequestStyle {
case FMRequestJSON
case FMRequestString
}
class FLGAFNetWorkingTool: NSObject {
Get请求
func getUrl(url:String,body:Any,result:FMResult,headerFile:NSDictionary,finished :@escaping (_ result : AnyObject?, _ error : Error?)-> ()){
let manager = AFHTTPSessionManager()
if headerFile.count != 0 {
for str in headerFile{
manager.requestSerializer.setValue(str.value as? String, forHTTPHeaderField: str.key as! String)
}
}
switch result {
case .FMData:
manager.responseSerializer = AFHTTPResponseSerializer()
break
case .FMJSON:
manager.responseSerializer = AFJSONResponseSerializer()
break
case .FMXML:
manager.responseSerializer = AFXMLParserResponseSerializer()
break
}
manager.responseSerializer.acceptableContentTypes = ["application/json", "text/json", "text/javascript","text/html","text/css","text/plain"]
manager.get(url, parameters: body, progress: nil, success: { (task :URLSessionDataTask?, result : Any?) in
finished(result as AnyObject?, nil)
}) { (task : URLSessionDataTask?, error :Error?) in
finished(nil, error)
}
}
post请求
func postUrl(url:String,body:Any,result:FMResult,requsetStyle:FMRequestStyle,headerFile:NSDictionary,finished :@escaping (_ result : AnyObject?, _ error : Error?)-> ()){
let manager = AFHTTPSessionManager()
//3.发送数据类型
switch requsetStyle {
case .FMRequestJSON:
manager.responseSerializer = AFJSONResponseSerializer()
break
case .FMRequestString:
manager.requestSerializer.setQueryStringSerializationWith({ (request:URLRequest, parameters:Any, error:NSErrorPointer) -> String in
return parameters as! String
})
break
}
//4.给网络请求添加请求头///可能会用到
if headerFile.count != 0 {
for str in headerFile{
manager.requestSerializer.setValue(str.value as? String, forHTTPHeaderField: str.key as! String)
}
}
//5.网络请求返回值的类型
switch result {
case .FMData:
manager.responseSerializer = AFHTTPResponseSerializer()
break
case .FMJSON:
manager.responseSerializer = AFJSONResponseSerializer()
break
case .FMXML:
manager.responseSerializer = AFXMLParserResponseSerializer()
break
}
//2.设置网络请求返回值支持的参数类型
manager.responseSerializer.acceptableContentTypes = ["application/json", "text/json", "text/javascript","text/html","text/css","text/plain"]
manager.post(url, parameters: body, progress: nil, success: { (task :URLSessionDataTask?, result : Any?) in
finished(result as AnyObject?, nil)
}) { (task : URLSessionDataTask?, error :Error?) in
finished(nil, error)
}
}
}
3. 调用方法
获取数据=====)
func getTopicVideosLieBiao(tag:NSString,withStart: NSInteger, withLimit: NSInteger,finished :@escaping (_ result : FLGTopicZuoPinModel?, _ error : Error?)-> ()){
let tool = FLGAFNetWorkingTool()
let url = String(format:"%@/video/getVideosByActivityTag?activityTag=%@&type=0&start=%ld&limit=%ld",arguments:[BASEADDRESS,tag,withStart,withLimit])
/// 网址中有中文的处理
let urlinput = url.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
tool.getUrl(url: urlinput!, body: [:], result:FMResult.FMJSON , headerFile: [:]){ (result:AnyObject?, error:Error?) in
if error != nil{
finished(nil, error)
}else{
let jsonDic = result as! NSDictionary
/// 字典转model。。。swift推荐HandyJSON
let model = FLGHotAutherModel.deserialize(from: jsonDic)
finished(model, nil)
}
}
}
HandyJSON的使用
pod 'HandyJSON', '~> 4.0.0-beta.1'
创建一个model文件 继承自nsobject
import UIKit
import HandyJSON
struct FLGHotAutherBody: HandyJSON {
var nicName: String?
var header: String?
var id: Int?
var sex: Int?
}
class FLGHotAutherModel: HandyJSON(此处直接把NSObject替换掉) {
var customMessage: String?
var customCode: String?
var state: Bool?
var body: [FLGHotAutherBody]?(表示body里面是数组)
var body: FLGHotAutherBody?(表示body里面是字典)
required init() {}
}