概述:本文通过实例从同步和异步两种方式上回答了”如何在Swift语言中创建http请求“的问题。
如果你对Objective-C比较了解的话,对于如何创建http请求你一定驾轻就熟了,而新语言Swift与其相比只有语法上的区别。但是,对才接触到这个崭新平台的初学者来说,他们仍然想知道“如何在Swift语言中创建http请求?”。
在这里,我将作出一些建议来回答上述问题。常见的创建http请求的方式主要有两种:同步和异步。在这里,我们将对这两种方式作一一讨论。
在objective C,可以使用NSURL、NSURLRequest和NSURLConnection来创建http请求,而在Swift,它们同样的适用。让我们从同步调用开始吧。
同步调用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
var url = NSURL.URLWithString(urlString) // Creating URL
var request = NSURLRequest(URL: url) // Creating Http Request
var response:AutoreleasingUnsafePointer<NSURLResponse?> = nil; var error: AutoreleasingUnsafePointer<NSErrorPointer?> = nil; // Sending Synchronous request using NSURLConnection var responseData = NSURLConnection.sendSynchronousRequest(request,returningResponse: response, error:nil) as NSData if error != nil
{ // You can handle error response here
} else { //Converting data to String
var responseStr:NSString = NSString(data:responseData, encoding:NSUTF8StringEncoding)
} |
如果响应的是JSON格式,你可以直接把它解析到NSArray / NSDictionary格式:
1
|
var responseDict: NSDictionary = NSJSONSerialization.JSONObjectWithData(responseData,options: NSJSONReadingOptions.MutableContainers, error:nil) as NSDictionary |
异步调用:
异步调用可以使用委托模式或者使用objective-c中的completion handler。
使用completion handler:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
var url = NSURL.URLWithString(urlString) // Creating URL
var request = NSURLRequest(URL: url) // Creating Http Request
// Creating NSOperationQueue to which the handler block is dispatched when the request completes or failed var queue: NSOperationQueue = NSOperationQueue() // Sending Asynchronous request using NSURLConnection NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{(response:NSURLResponse!, responseData:NSData!, error: NSError!) ->Void in if error != nil
{
println(error.description)
self.removeActivityIndicator()
}
else
{
//Converting data to String
var responseStr:NSString = NSString(data:responseData, encoding:NSUTF8StringEncoding)
}
})
|
使用委托模式:
1
2
3
4
5
|
var url = NSURL.URLWithString(urlString) // Creating URL
var request = NSURLRequest(URL: url) // Creating Http Request
//Making request var connection = NSURLConnection(request: request, delegate: self, startImmediately: true )
|
在这里,如果要让connection一开始就立刻加载数据,可把startImmediately的值设定为true,否则就设定为false。如果你使用的是false,则connection将会被设定为不在run loop下运行。你可以在之后通过调用scheduleInRunLoop(_aRunLoop:NSRunLoop!,forMode mode:String!)来将connection设定为进入run loop运行和你所选择的模式。
现在你可以创建请求,但是你需要定义在这种情况下的作为响应的委托。
在上面的代码中,我们传递委托来作为self,因此包含的类应当与NSURLConnectionDataDelegate一致,并且类中也应当定义以下委托函数:
1
2
3
4
|
func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!) { //It says the response started coming
NSLog( "didReceiveResponse" )
} |
你还应当定义一个全局的NSMutableData变量:
1
|
var data = NSMutableData() |
这里还有一种可能性是数据可能以块的形式存在。如果数据是以分批的形式接受到的,那么以下的委托函数将会把这些数据收集成块并添加到已定义的全局数据变量。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
func connection(connection: NSURLConnection!, didReceiveData _data: NSData!) { //This will be called again and again until you get the full response
NSLog( "didReceiveData" )
// Appending data
self.data.appendData(_data)
} func connectionDidFinishLoading(connection: NSURLConnection!) { // This will be called when the data loading is finished i.e. there is no data left to be received and now you can process the data.
NSLog( "connectionDidFinishLoading" )
var responseStr:NSString = NSString(data:self.data, encoding:NSUTF8StringEncoding)
} |
本文作者将整个代码封装在了一个示例项目里,你可以在my github repo上进行下载。
相关推荐
Swift语言学习的20个注意事项及其案例 这里提供了六个基于 Swift 语言的案例,涵盖不同应用场景,以帮助您更好地了解 Swift: 1. iOS 应用程序:使用 Swift 创建一个简单的 iOS 应用程序,例如记事本应用。该案例将...
评级经理 一个简单的Swift类,提示用户在启动时对应用程序进行评分。 用法 只需将RatingManager.swift文件拖到您的Xcode...目前,字符串是法语,但是如果有人想翻译成英语或其他语言,则可以创建请求请求,因此我将其添
机器学习Swift 该存储库包含为快速机器学习研究的文档... 如果您想做出贡献,只需打开一个通知改进的问题或创建请求请求。 表示支持 给一个 :star: 如果这个项目对您有帮助! :memo: 执照 版权所有:copyright:2020
服务用于处理HTTP请求,功能用于通过处理请求的页面或文件来准备响应。 这使得创建除HTML,CSS和Swift以外的其他任何网站都成为可能。 不需要其他语言,框架或外部服务,但用于HTTPS的openSSL除外。 要将Swiftfire...
在我的中介绍了语言参考和非常基础的工作原理。 您可以使用创建的与解释器一起玩。 此外,存储库包含带有示例的游乐场。 玩得开心! :turtle: 。 贡献 我很乐意看到您的想法,以改善这一点! 最好的贡献方式是提交...
在这里,您将找到使用大家最喜欢的新语言 Swift 实现的流行算法和数据结构,并详细解释了它们的工作原理。 如果您是一名计算机科学专业的学生,需要在考试中学习这些东西 - 或者如果您是一名自学的程序员,想要...
Swift NIO的协作列表。贡献您是否知道此列表中缺少的内容?...-SwiftNIO的HTTP / 2支持-SwiftNIO的扩展,以一流的公民身份支持Apple平台基于SwiftNIO构建的HTTP客户端库 - 的Swift语言实现服务器端Swif
Swift for NCEA 一本有关Swift编程语言的书,适用于NCEA编程(12和13年级)。作者山姆·贾曼(Sam Jarman) 改编自Jack Morgan的Python资源贡献捐款时请采取以下步骤如果您认为是错字或其他问题,请提出问题。 如果...
在这里,您将找到使用大家最喜欢的新语言 Swift 实现的流行算法和数据结构,并详细解释了它们的工作原理。 如果您是一名计算机科学专业的学生,需要在考试中学习这些东西 - 或者如果您是一名自学的程序员,想要...
这个页面总结了两种语言中的许多常见模式,让开发人员更容易阅读 Objective-C 代码来编写 Swift 代码(反之亦然!)。 请注意,这是一个动态文档,我将随着时间的推移添加到其中。 如果你觉得这里应该有一个共同的...
:clapper_board:www.pointfree.co此存储库包含Point-Free网站的完整源代码,这是一个探索...样式指南:该库包含用于在整个网站上创建一致样式的函数和数据类型。 服务器:这是实际的可执行服务器。 它使用NIO来处理
迅捷电话号码格式化程序 概述 编写该项目是为了简化Swift 4+中的电话号码格式... 注意:如果您想贡献更多规则集,请分叉存储库,添加规则集,并使用您的更改创建请求请求。 遵循已内置规则集的示例,应按语言环境将规则
在这里,您将找到使用大家最喜欢的新语言 Swift 实现的流行算法和数据结构,并详细解释了它们的工作原理。 如果您是一名计算机科学专业的学生,需要在考试中学习这些东西 - 或者如果您是一名自学的程序员,想要...
强大的HTTP和GraphQL工具 在一处指定URL,有效负载,标头和授权。...为30多种语言库(包括Curl,NodeJS,Go,Swift,Python,Java,C等)生成HTTP代码。 直观界面快速启动,选择从9个独特的主题来定制体验到你。
在这里,您将找到使用大家最喜欢的新语言 Swift 实现的流行算法和数据结构,并详细解释了它们的工作原理。 如果您是一名计算机科学专业的学生,需要在考试中学习这些东西 - 或者如果您是一名自学的程序员,想要...
由( 在07 / SEP / 15上创建。 什么? 关于TableView和CoreData一起工作的简单示例。 iOS版本: 9 语言:斯威夫特 Xcode: 7.0 特征 具有操作的TableView(添加项目并在单元格上滑动:编辑,删除按钮)。 简单...
如果您想做出贡献,请派生存储库并使用您的新功能创建请求请求,并确保: 描述得好 包括必要的测试 遵循编码风格 :globe_showing_Europe-Africa: 增加对新国家的支持 阅读 :white_flag: 添加对新语言的支持 在lib...
在该语言和Xcode的测试阶段,开发人员社区目前正在开发分发Swift库的基础结构和最佳实践。 同时,您可以简单地将此存储库下载为ZIP文件,并将OneShotLocationManager.swift文件拖到您的Xcode项目中。 程式码范例 ...
由于这个原因(以及其他原因),她值得我为创建一个小扩展名而努力,因此我每天都能看到她+真正方便用户的导航功能,特点:-出色的泰勒·史密斯(Taylor Smith)每天都有新照片。我是否提到过它们是高清的? -Google...