`

如何在Swift语言中创建http请求

阅读更多
概述:本文通过实例从同步和异步两种方式上回答了”如何在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 urlString = "http://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格式:

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 urlString = "http://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)
         }
    })

使用委托模式:

1
2
3
4
5
var urlString = "http://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: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上进行下载。

1
0
分享到:
评论

相关推荐

    swift -> http 请求 (SwiftHTTP)

    在Swift编程语言中,进行HTTP请求是开发iOS和macOS应用程序不可或缺的一部分。SwiftHTTP是一个流行的第三方库,它简化了在Swift中发送HTTP请求的过程。这篇博文(https://mft.iteye.com/blog/2304029)可能详细介绍...

    ios-swift nsurlsession实现并发网络请求.zip

    在iOS开发中,Swift语言是首选的编程工具,而`NSURLSession`是苹果提供的一种用于处理网络请求的核心组件。本教程将深入探讨如何使用Swift和`NSURLSession`来实现并发网络请求,以提高应用性能和用户体验。 首先,...

    Swift语言教程 :Swift 项目实战

    Swift语言是苹果公司推出的一种强大的、现代化的编程语言,用于构建iOS、iPadOS、macOS、watchOS和tvOS的应用程序。本教程“Swift语言教程:Swift项目实战”旨在通过实际项目开发,深入理解Swift语言的各个方面,...

    swift-Swift基础知识点网络请求数据解析UI微信授权登录等等

    在“Swift基础知识点、网络请求、数据解析、UI、微信授权登录”这个主题中,我们将深入探讨这些关键领域。 1. **Swift基础知识点**: - **变量与常量**:Swift中的`let`用于定义常量,`var`用于定义变量,它们都有...

    swift语言model的使用

    总之,Swift语言中的Model在MVC架构中扮演着数据核心的角色。通过正确地设计和使用Model,我们可以构建出高效、清晰的iOS应用。在`ModelTest`项目中,你将学习如何在Xcode中创建和操作Model,以及如何将其整合到你的...

    swift-Swift的HTTP序列化器

    本篇文章将深入探讨Swift中的HTTP序列化器及其在实际开发中的应用。 首先,我们需要理解什么是序列化。序列化是将一个对象的状态转化为可存储或可传输的形式的过程,而反序列化则是相反的过程,即从序列化的数据...

    swift-swift基于Alamofire数据请求封装

    在这个"swift-swift基于Alamofire数据请求封装"的主题中,我们将深入探讨如何利用Alamofire进行网络数据请求,并进行封装,以提高代码的可复用性和可维护性。 首先,了解Alamofire的基本用法是至关重要的。...

    swift-一个面向对象网络请求框架可以在iOS项目开发中增加数据处理层

    2. 初始化请求:在服务对象中设置请求参数,如URL、HTTP方法、请求头和请求体。 3. 发起请求:调用服务对象的方法发起网络请求。 4. 处理响应:当请求完成时,框架会提供回调,通常包含成功和失败两种情况。成功时...

    Apple Swift 语言 中文版

    通过学习Apple Swift语言中文版,开发者可以掌握创建世界级应用程序所需的所有技能,包括界面设计、网络通信、数据存储、多线程处理等。无论是对于新手还是经验丰富的程序员,Swift都是一个值得投入时间和精力学习的...

    swift-afnetwork 网络请求的实现

    在iOS开发中,Swift语言与第三方库的集成是不可或缺的一部分,特别是对于网络请求而言,AFNetworking是最常用的网络库之一。本篇文章将详细讲解如何在Swift项目中通过CocoaPods来实现AFNetworking的网络请求。 首先...

    苹果Swift编程语言入门教程-中文完整版

    在Swift中,你可以在`main.swift`文件中输入`print("Hello, World!")`,然后运行代码。 3. **变量和常量**:Swift中使用`var`声明变量,`let`声明常量。例如,`var myVariable = 42` 和 `let myConstant = "Hello"`...

    Swift语言开发第三方微博项目

    集成网络请求库:在项目中选择一个适合的网络请求库,例如Alamofire或者URLSession,用于向微博API发送HTTP请求并处理响应。 编写认证逻辑:实现OAuth认证流程,以便用户可以登录他们的微博账号并授权你的应用程序...

    swift-请求ProtocolBuffers和JSON的Swift示例

    标题"swift-请求ProtocolBuffers和JSON的Swift示例"表明我们将探讨如何在Swift中同时使用这两种数据交换格式。在描述中提到的是具体的Swift代码示例,这可能包括如何定义和解析Protobuf消息,以及如何进行JSON编码和...

    Swift语言的json开发包

    Swift语言的JSON开发包,通常指的是名为SwiftyJSON的第三方库,它为Swift开发者提供了一种简洁、易用的方式来解析和操作JSON数据。在iOS、macOS、watchOS以及tvOS应用开发中,JSON(JavaScript Object Notation)是...

    iOS开发swift语言

    在“iOS开发swift语言”这个主题中,我们将深入探讨Swift的基础语法、类型系统、控制流、函数、类与结构体、协议、泛型、错误处理以及Swift中的新特性,如可选链、闭包等。Swift语言的一大亮点是其Playgrounds,这是...

    ios-原滋原味的 swift post 网络请求.zip

    在iOS开发中,网络请求是应用与服务器交互的基础,Swift作为苹果公司推出的强大编程语言,提供了多种方式进行网络请求。这个“ios-原滋原味的 swift post 网络请求.zip”压缩包很可能是包含了一个简单的Swift实现...

    swift-Swift3.0语言编写的个人日记客户端

    在Swift3.0中,语法的改进和类型系统的强化使得代码更加清晰和安全。例如,强制解包运算符(!)被鼓励减少使用,以避免意外的崩溃,取而代之的是可选链(?.)和可选绑定(if let)。此外,Swift3.0引入了泛型、协议...

    swift-基于URLSession封装的网络请求框架

    Swift编程语言以其强大的功能和简洁的语法在iOS和macOS应用开发中占据着核心地位。在Swift中,URLSession是用于处理网络数据传输的主要API,它提供了与HTTP及其他网络协议交互的能力。本教程将深入探讨如何基于...

    swift-一个对AFN网络框架的简单封装具有网络请求过程的日志打印功能

    Swift是一种强大的、类型安全的编程语言,常用于iOS、macOS、watchOS和tvOS等Apple平台的应用开发。在iOS应用开发中,网络请求是必不可少的一部分,用来获取远程服务器的数据。AFNetworking是一款广泛使用的...

Global site tag (gtag.js) - Google Analytics