提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|行业资讯|编辑:郝浩|2015-02-27 14:47:19.000|阅读 2806 次
概述:本文通过实例从同步和异步两种方式上回答了”如何在Swift语言中创建http请求“的问题。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
如果你对Objective-C比较了解的话,对于如何创建http请求你一定驾轻就熟了,而新语言Swift与其相比只有语法上的区别。但是,对才接触到这个崭新平台的初学者来说,他们仍然想知道“如何在Swift语言中创建http请求?”。
在这里,我将作出一些建议来回答上述问题。常见的创建http请求的方式主要有两种:同步和异步。在这里,我们将对这两种方式作一一讨论。
在objective C,可以使用NSURL、NSURLRequest和NSURLConnection来创建http请求,而在Swift,它们同样的适用。让我们从同步调用开始吧。
var urlString = "//api.shephertz.com" // Your Normal URL String 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格式:
var responseDict: NSDictionary = NSJSONSerialization.JSONObjectWithData(responseData,options: NSJSONReadingOptions.MutableContainers, error:nil) as NSDictionary
异步调用可以使用委托模式或者使用objective-c中的completion handler。
var urlString = "//api.shephertz.com" // Your Normal URL String 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) } })
var urlString = "//api.shephertz.com" // Your Normal URL String 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:!,forMode mode:!)来将connection设定为进入run loop运行和你所选择的模式。
现在你可以创建请求,但是你需要定义在这种情况下的作为响应的委托。
在上面的代码中,我们传递委托来作为self,因此包含的类应当与NSURLConnectionDataDelegate一致,并且类中也应当定义以下委托函数:
func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!) { //It says the response started coming NSLog("didReceiveResponse") }
你还应当定义一个全局的NSMutableData变量:
var data = NSMutableData()
这里还有一种可能性是数据可能以块的形式存在。如果数据是以分批的形式接受到的,那么以下的委托函数将会把这些数据收集成块并添加到已定义的全局数据变量。
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) }
本文作者将整个代码封装在了一个示例项目里,你可以在上进行下载。
本文翻译自 ,原作者 ,译者 回忆和感动,转载请注明 文章转载自慧都控件网
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
CEETRON Envision是一款功能强大的CAE数据分析与可视化工具包,凭借其卓越的数据提取、分析、渲染能力,能够帮助工程师和开发人员提升分析效率、改善工作流程,并通过高效的数据共享报告和生成功能,进一步优化团队协作与决策过程。
Burp Suite是一款专业的Web应用安全测试工具,集成了Proxy、Scanner、Intruder等功能,帮助渗透测试人员识别和修复Web应用中的安全漏洞,是提升Web应用安全性和防护能力的必备利器。
2024年对于FastReport来说是充满挑战和收获的一年。FastReport在多个领域取得了重要突破和创新成果,不仅不断优化现有产品,
通过提供强大的3D CAD数据访问工具并适用于桌面、移动和Web的高级环境3D可视化发动机,HOOPS在提升造船设计和制造流程的效率方面发挥了重要作用。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢