使用Swift进行iOS开发时,不可避免的要进行远程的数据获取和提交。 其数据请求的方式既可能是POST也可能是GET。同不管是POST还是GET又可以分为同步请求和异步请求。 下面通过四个例子来进行演示。

1,使用POST方式提交数据(用户id和分数)

(1)同步请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//保存分数
func saveScore(score:Int, userid:String)
{
    let urlString:String = "http://hangge.com/"
    var url:NSURL!
    url = NSURL(string:urlString)
    var request = NSMutableURLRequest(URL:url)
    var body = "score=\(score)&user=\(userid)"
    //编码POST数据
    var postData = body.dataUsingEncoding(NSUTF8StringEncoding)
    //保用 POST 提交
    request.HTTPMethod = "POST"
    request.HTTPBody = postData
     
    //响应对象
    var response:NSURLResponse?
    //错误对象
    var error:NSError?
     
    //发出请求
    var received:NSData? = NSURLConnection.sendSynchronousRequest(request,
        returningResponse: &response, error: &error)
     
    if(error != nil){
        println(error?.code)
        println(error?.description)
    }else{
        var datastring = NSString(data:received!, encoding: NSUTF8StringEncoding)
        println(datastring)
    }
}

(2)异步请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import UIKit
 
class ScoreController:NSObject, NSURLConnectionDataDelegate
{
    //保存分数
    func saveScore(score:Int, userid:String)
    {
        let urlString:String = "http://hangge.com/savescore.php"
        var url:NSURL!
        url = NSURL(string:urlString)
        var request = NSMutableURLRequest(URL:url)
        var body = "score=\(score)&user=\(userid)"
        //编码POST数据
        var postData = body.dataUsingEncoding(NSASCIIStringEncoding)
        //保用 POST 提交
        request.HTTPMethod = "POST"
        request.HTTPBody = postData
        var conn:NSURLConnection!
        conn = NSURLConnection(request: request,delegate: self)
        conn.start()
        println(conn)
    }
        
    func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!)
    {
        println("请求成功!");
        println(response)
    }
     
    func connection(connection: NSURLConnection!, didReceiveData data: NSData!)
    {
        println("请求成功1!");
        var datastring = NSString(data:data, encoding: NSUTF8StringEncoding)
        println(datastring)
    }
     
    func connectionDidFinishLoading(connection: NSURLConnection!)
    {
        println("请求成功2!");
    }
}
2,使用GET方式获取数据(用户id对应的分数)

(1)同步请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//获取分数
func getScore(user:String){
     
    let urlString:String="http://hangge.com/getscore.php?user=\(user)"
    var url:NSURL!
    url = NSURL(string:urlString)
    var request = NSMutableURLRequest(URL:url)
    request.HTTPMethod = "GET"
     
    //响应对象
    var response:NSURLResponse?
    //错误对象
    var error:NSError?
     
    //发出请求
    var received:NSData? = NSURLConnection.sendSynchronousRequest(request,
        returningResponse: &response, error: &error)
     
    if(error != nil){
        println(error?.code)
        println(error?.description)
    }else{
        var datastring = NSString(data:received!, encoding: NSUTF8StringEncoding)
        println(datastring)
    }
}

(2)异步请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import UIKit
 
class ScoreController:NSObject, NSURLConnectionDataDelegate
{   
    //获取分数
    func getScore(user:String)
    {
        let urlString:String="http://hangge.com/getscore.php?user=\(user)"
        var url:NSURL!
        url = NSURL(string:urlString)
        var request = NSMutableURLRequest(URL:url)
         
        var body = "user=\(user)"
        request.HTTPMethod = "GET"
        var conn:NSURLConnection!
        conn = NSURLConnection(request: request,delegate: self)
        conn.start()
        println(conn)
    }
     
    func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!)
    {
        println("请求成功!");
        println(response)
    }
     
    func connection(connection: NSURLConnection!, didReceiveData data: NSData!)
    {
        println("请求成功1!");
        var datastring = NSString(data:data, encoding: NSUTF8StringEncoding)
        println(datastring)
        //解析 JSON 数据
        var json : AnyObject! = NSJSONSerialization.JSONObjectWithData(data,
            options:NSJSONReadingOptions.AllowFragments,error:nil)
         
        var score = json.objectForKey("score") as Int
        println(score)
    }
     
    func connectionDidFinishLoading(connection: NSURLConnection!)
    {
        println("请求成功2!");
    }
}

Swift - 使用NSURL进行数据的提交和获取(POST与GET)的更多相关文章

  1. iOS开发——网络Swift篇&NSURL进行数据请求(POST与GET)

    NSURL进行数据请求(POST与GET)   使用Swift进行iOS开发时,不可避免的要进行远程的数据获取和提交. 其数据请求的方式既可能是POST也可能是GET.同不管是POST还是GET又可以 ...

  2. WCF+Restfull服务 提交或获取数据时数据大小限制问题解决方案

    近日在使用wcf的restfull架构服务时遭遇到了提交大数据的问题. 大数据包含两种情形: 1)单条数据量过大. 2)提交或获取的数据条数过多. 在测试时发现,默认设置下当单条JSON数据大于30K ...

  3. js表单动态添加数据并提交

    情景1:已经存在form对象了,动态为form增加对象并提交 function formAppendSubmit(){ var myform=$('#newArticleForm'); //得到for ...

  4. loadrunner关联——对服务器返回的数据选择性提交

    在跟进项目的过程中,才体会到自己之前闷头看书再写小小的测试程序验证的学习方式很没有效率,知道动态关联,却也只是会参数化式的动态关联,这种关联是我们预先知道要提交的数据而进行的关联:更高一级的可能就是使 ...

  5. Struts2 06--系统拦截器防止数据重复提交

    一.拦截器简要概述 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 在W ...

  6. PHP/Post 提交请求获取json数据,并转化为所需要的数组

    /** * Post 提交请求获取json数据,并转化为所需要的数组 */ function request_post($url = '', $param = '') { if (empty($url ...

  7. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  8. element ui 表格提交时获取所有选中的checkbox的数据

    <el-table ref="multipleTable" :data="appList" @selection-change="changeF ...

  9. spring mvc源码-》MultipartReques类-》主要是对文件上传进行的处理,在上传文件时,编码格式为enctype="multipart/form-data"格式,以二进制形式提交数据,提交方式为post方式。

    spring mvc源码->MultipartReques类-> MultipartReques类主要是对文件上传进行的处理,在上传文件时,编码格式为enctype="multi ...

随机推荐

  1. 引用 RAM和ROM和Flash ROM的区别

    用 饿狼 的 RAM和ROM和Flash ROM的区别 RAM(Random Access Memory)的全名为随机存取记忆体,它相当于PC机上的移动存储,用来存储和保存数据的.它在任何时候都可以读 ...

  2. HTTP 301 跳转和302跳转的区别

    常用的重定向方式有: 301 redirect, 302 redirect 与 meta fresh: 301 redirect::301代表永久性转移(Permanently Moved),301重 ...

  3. c-大量经典的c算法---ShinePans

    经典的100个c算法 算法  题目:古典问题:有一对兔子.从出生后第3个月起每一个月都生一对兔子.小兔 子长到第三个月后每一个月又生一对兔子,假如兔子都不死,问每一个月的兔子总数 为多少? _____ ...

  4. JVM--常见的虚拟机回收算法

    Serial GC -XX:+UseSerialGC 这样就设置为了串行GC回收方式,这种方式在Client模式下是默认的. 一般是使用在单机程序,小内存,CPU个数少的机器上. 没有复杂的算法,只用 ...

  5. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序     在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity ...

  6. Visual Studio 2012的新技术特性

    前言 我更换了VS2012开发工具,那么它有什么特性呢? [caption id="attachment_1235" align="alignnone" wid ...

  7. Multiple bindings were found on the class path(转)

    Multiple bindings were found on the class path SLF4J API is designed to bind with one and only one u ...

  8. HDU4707:Pet(DFS)

    Problem Description One day, Lin Ji wake up in the morning and found that his pethamster escaped. He ...

  9. HDU 4836 The Query on the Tree lca || 欧拉序列 || 动态树

    lca的做法还是非常明显的.简单粗暴, 只是不是正解.假设树是长链就会跪,直接变成O(n).. 最后跑的也挺快,出题人还是挺阳光的.. 动态树的解法也是听别人说能ac的.预计就是放在splay上剖分一 ...

  10. JCL学习

    JCL基本概念 定义:job control language 用户与操作系统的接口,用户通过JCL语句按照自己的意图来控制作业的执行. JOB的概念:把大机要实现的每一项任务,称为一个JOB或作业. ...