swift 网络请求 2
来源:互联网 发布:用java编写爱心 编辑:程序博客网 时间:2024/04/30 07:20
http://www.cocoachina.com/ios/20141202/10390.html
(1) Alamofire 其实是基于NSURLSession
的,但是它可以免去您写样板(boilerplate)代码的麻烦,并且可以让网络模块的代码更为简单易用。您可以通过一些非常简单的操作来访问 Internet 上的数据,并且写出来的代码也会更加清晰明了、简单易读。
要使用 Alamofire 的话,首先需要导入它。请打开PhotoBrowserCollectionViewController.swift文件,然后在文件顶部添加如下代码:
import Alamofire
您需要在每个使用了 Alamofire 类以及函数的文件中添加这条import
语句。
接下来,在setupView()
下方的viewDidLoad()
方法中添加如下代码:
Alamofire.request(.GET, “https://api.500px.com/v1/photos“).responseJSON() {
(, , data, _) in
println(data)
}
过会儿我会对其做出详细解释,但是首先您需要生成并运行该应用,这个时候您会在控制台中看到如下信息:
Optional({
error = “Consumer key missing.”;
status = 401;
})
下面来解释一下那些代码到底做了些什么:
· Alamofire.request(:)接收两个参数:method和URLString。其中,method 通常是.GET、.POST;URLString通常是您想要访问的内容的 URL。其将返回一个Alamofire.Request对象。
· 通常情况下,您只需将请求对象链接到响应方法上。例如,在上面的代码中,请求对象简单地调用了responseJSON()方法。当网络请求完毕后,responseJSON()方法会调用我们所提供的闭包。在我们的示例中,我们只是简单的将经过解析的 JSON 输出到控制台中。
· 调用responseJSON方法意味着您期望获得一个 JSON 数据。在我们的示例中,Alamofire 试图解析响应数据并返回一个 JSON 对象。或者,您可以使用responsePropertyList来请求获得一个属性列表,也可以使用responseString来请求获得一个初始字符串。在本教程后面,您将了解更多关于响应序列化方法的使用方式。
您可以从控制台中看到输出的响应数据,服务器报告您需要一个名为consumer key的东西。在我们继续使用 Alamofire 之前,我们需要从 500px 网站的 API 中获取一个密钥。
获取消费者密钥
前往https://500px.com/signup,然后使用您的邮箱免费注册,或者使用您的 Facebook 、Twitter 或者 Google 帐号登录。
一旦您完成了注册流程,那么前往https://500px.com/settings/applications并单击”Register your application”。
Alamofire.request(.GET, "https://api.500px.com/v1/photos", parameters: ["consumer_key": "PASTE_YOUR_CONSUMER_KEY_HERE"]).responseJSON() { (_, _, JSON, _) in println(JSON)}
{ "feature": "popular", "filters": { "category": false, "exclude": false }, "current_page": 1, "total_pages": 250, "total_items": 5000, "photos": [ { "id": 4910421, "name": "Orange or lemon", "description": "",... } }, { "id": 4905955, "name": "R E S I G N E D", "description": "From the past of Tagus River, we have History and memories, some of them abandoned and disclaimed in their margins ...",... } ]}
let photoInfos = (JSON!.valueForKey("photos") as [NSDictionary]).filter({ ($0["nsfw"] as Bool) == false }).map { PhotoInfo(id: $0["id"] as Int, url: $0["image_url"] as String) }self.photos.addObjectsFromArray(photoInfos)self.collectionView.reloadData()
let imageURL = (photos.objectAtIndex(indexPath.row) as PhotoInfo).urlAlamofire.request(.GET, imageURL).response() { (_, _, data, _) in let image = UIImage(data: data! as NSData) cell.imageView.image = image}
enum Router: URLRequestConvertible { static let baseURLString = "https://api.500px.com/v1" static let consumerKey = "PASTE_YOUR_CONSUMER_KEY_HERE" case PopularPhotos(Int) case PhotoInfo(Int, ImageSize) case Comments(Int, Int) var URLRequest: NSURLRequest { let (path: String, parameters: [String: AnyObject]) = { switch self { case .PopularPhotos (let page): let params = ["consumer_key": Router.consumerKey, "page": "\(page)", "feature": "popular", "rpp": "50", "include_store": "store_download", "include_states": "votes"] return ("/photos", params) case .PhotoInfo(let photoID, let imageSize): var params = ["consumer_key": Router.consumerKey, "image_size": "\(imageSize.rawValue)"] return ("/photos/\(photoID)", params) case .Comments(let photoID, let commentsPage): var params = ["consumer_key": Router.consumerKey, "comments": "1", "comments_page": "\(commentsPage)"] return ("/photos/\(photoID)/comments", params) } }() let URL = NSURL(string: Router.baseURLString) let URLRequest = NSURLRequest(URL: URL!.URLByAppendingPathComponent(path)) let encoding = Alamofire.ParameterEncoding.URL return encoding.encode(URLRequest, parameters: parameters).0 }}
- swift 网络请求 2
- Swift之网络请求
- Swift网络请求
- swift 网络请求
- Swift - 网络请求
- swift 网络请求
- swift网络请求封装
- swift网络数据的请求
- swift网络数据请求方法
- swift 网络请求&json解析
- Swift网络请求库Alamofire
- swift网络数据请求方法
- swift基础值网络请求
- Swift 之 Alamofire 网络请求、取消请求
- Swift之网络编程-请求缓存
- Swift之网络请求框架封装
- 网络请求工具 SWIFT JSON解析
- 使用Swift调用AFNetworking进行网络请求
- swift中的闭包
- JS中如何实现button响应的切换?
- centos 7 下如何创建启动终端的快捷方式
- Unity 3D实现血量增加减少
- Linux 开起IP 转发forward
- swift 网络请求 2
- TestNG 入门教程(@Rollback(false)不回滚)
- Android秒数转时间
- 奥普思凯---这是一个神奇的网站
- CSS实现三角形的动画旋转
- C#类的数据成员
- 数据结构学习之 union 共用体(union 到底有什么用?)
- 谈C#中编码Encoding
- MFC中的CTime类 获取系统当前时间 格式化时间等