swift 使用AFNetWorking 进行网络请求


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() {}

}






猜你喜欢

转载自blog.csdn.net/flg1554112450/article/details/78772663