使用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. nginx记录响应与POST请求日志

    生产环境中的某些api出现故障,但是问题无法重现,但是又很想解决掉问题以及我们新项目上线,需要跟踪请求与响应的信息,可以预先找到一些bug,减少大面积的损失. 安装nginx与ngx_lua 响应日志 ...

  2. Hadoop: the definitive guide 第三版 拾遗 第十章 之Pig

    概述: Pig的安装很简单,注意一下几点: 1.设置系统环境变量: export PIG_HOME=.../pig-x.y.z export PATH=$PATH:$PIG_HOME/bin 设置完成 ...

  3. Android 电话自己主动接听和挂断具体解释

    1.通过aidl及反射实现挂断电话 详细分三步: (1)ITelephony.aidl ,必须新建com.android.internal.telephony包并放入ITelephony.aidl文件 ...

  4. uC/OS II 函数说明 之–OSTaskCreate()与OSTaskCreateExt()

    1. OSTaskCreate()    OSTaskCreate()建立一个新任务,能够在多任务环境启动之前,或者执行任务中建立任务.注意,ISR中禁止建立任务,一个任务必须为无限循环结构.    ...

  5. tweenanim动画

    1.视图 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...

  6. Java进阶04 RTTI

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/14/3013985.html 作者:Vamei 出处:http://www.cnblogs.com ...

  7. malloc & free

    动态分配内存 #include<stdio.h> #include<stdlib.h> int compare_integers(void const *a,void cons ...

  8. 【译】在Asp.Net中操作PDF - iTextSharp - 绘制矢量图

    原文 [译]在Asp.Net中操作PDF - iTextSharp - 绘制矢量图 在上一篇iTextSharp文章中讲述了如何将现有的图片插入PDF中并对其进行操作.但有时,你需要在PDF中绘制不依 ...

  9. RedHat Linux 5.5安装JDK+Tomcat并部署Java项目

    与大家分享下RedHat Linux 5.5安装JDK+Tomcat并部署Java项目的步骤,希望对大家有用. 1.下载并安装jdk 虚拟机中安装RedHat Linux 5.5 64位企业版, 这里 ...

  10. .Net 社区虚拟大会”(dotnetConf)

    .Net 社区虚拟大会”(dotnetConf) “.Net 社区虚拟大会”(dotnetConf) 2016 今天凌晨在Channel9 上召开,在Scott Hunter的30分钟的 Keynot ...