如何在Swift 中使用AFNetworking

 我来答
huanglenzhi
2016-08-24 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517189
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部

在工程中随便创建一个类,选择语言OC,我们会发现工程中会多出来一个SwiftStudy-Bridging-Header.h文件,删除创建的oc类,在这里引入

 

//

//  RequestClient.swift

//  SwiftStudy

//

//  Created by 杨雯德 on 15/8/19.

//  Copyright (c) 2015年 杨雯德. All rights reserved.

//

 

import UIKit

class RequestClient: AFHTTPSessionManager {

    

   class var sharedInstance :RequestClient {

       struct Static {

           static var onceToken:dispatch_once_t = 0

           static var instance:RequestClient? = nil

       }

        

       dispatch_once(&Static.onceToken, { () -> Void in

         //string填写相应的baseUrl即可

           var url:NSURL = NSURL(string: "")!

           Static.instance = RequestClient(baseURL: url)

       }) 

         //返回本类的一个实例

       return Static.instance!

        

   }

}

   

拿到RequestClient的实例我们就可以进行post、get以及上传图片文件的封装了

在OC中使用AFNetworking习惯使用block来进行数据的传递等,在Swift我们使用闭包来进行数据的传输

这是我的文件目录

SwiftStudy ------------工程目录

AppDelegate.swift

myViewController.swift

ViewController.swift

NetWork  ------------网络相关

RequestClient.swift

RequestAPI.swift

CustomVC ------------VC的封装,

  CostomNavigationVC.swift

  BaseViewController.swift

接下来看函数内部实现,我们定义两个变量来接收传递过来的函数指针,通过函数指针就可以回传数据拉。Swift与Objective-C最大的不同是使用了.语法,继续往下看

通过RequestClient.sharedInstance 我们可以获得RequestClient的一个实例,这就是swift中单例模式的使用哦,回来在看看RequestClient.swift就明白了,

然后我们就开始真正的网络请求了,调用AFHTTPSessionManager的PUT方法

1

2

3

4

5

6

   

RequestClient.sharedInstance.GET(url, parameters: body, success: { (task:NSURLSessionDataTask!, responseObject:AnyObject!) in

           mysucceed(task,responseObject)

            

           }) { (task:NSURLSessionDataTask!, error:NSError!) in

               myfailure(task,error)

       }

   

依次填写对应的参数,我们看下

1

2

3

4

   

success: { (task:NSURLSessionDataTask!, responseObject:AnyObject!) -> Void in

           mysucceed(task,responseObject)

            

           })

   

这是一个标准的闭包, (task:NSURLSessionDataTask!, responseObject:AnyObject!) -> Void有没有感觉很熟悉,正是我们最开始定义的Succeed,由此,你又学习

了一招闭包的表达式写法

1

2

3

   

{ (parameters) -> returnType in

statements

}

   

关于闭包的具体操作请查看 “http://c.biancheng.net/cpp/html/2285.html" 

闭包函数中我们就可以拿到服务器给我们返回的数据了responseObject,在函数开始我们已经接受了外部的函数指针,通过这个函数指针我们把值传递回去即可,

/**

RequestClient.sharedInstance.requestSerializer = AFJSONRequestSerializer()

RequestClient.sharedInstance.responseSerializer = AFJSONResponseSerializer()

RequestClient.sharedInstance.requestSerializer.setValue("application/json,text/html", forHTTPHeaderField: "Accept")

RequestClient.sharedInstance.requestSerializer.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")

*/

   

微测检测5.10
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇... 点击进入详情页
本回答由微测检测5.10提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式