如何在Swift 中使用AFNetworking
2016-08-24 · 知道合伙人数码行家
知道合伙人数码行家
向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")
*/
2023-05-10 广告