swift 使用AFNetWorking 进行网络请求

本文介绍了如何在Swift中利用AFNetworking库进行GET和POST网络请求,以及结合HandyJSON库对返回的数据进行JSON解析。详细步骤包括安装AFNetworking和HandyJSON,创建网络请求工具类,定义请求类型和结果类型,并提供了调用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值