NSURL进行数据请求(POST与GET)

 
使用Swift进行iOS开发时,不可避免的要进行远程的数据获取和提交。

其数据请求的方式既可能是POST也可能是GET。同不管是POST还是GET又可以分为同步请求和异步请求。

下面通过四个例子来进行演示。

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

(1)同步请求

 //保存分数
 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)异步请求

 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)同步请求

 //获取分数
 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)异步请求

 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!");
     }
 }
 

iOS开发——网络Swift篇&NSURL进行数据请求(POST与GET)的更多相关文章

  1. iOS开发——网络Swift篇&JSON与XML数据解析

    JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit)   一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...

  2. iOS开发——网络Swift篇&NSURLSession加载数据、下载、上传文件

    NSURLSession加载数据.下载.上传文件   NSURLSession类支持三种类型的任务:加载数据.下载和上传.下面通过样例分别进行介绍.   1,使用Data Task加载数据 使用全局的 ...

  3. iOS 开发——实用技术Swift篇&Swift 懒加载(lazy)

    Swift 懒加载(lazy) 在程序设计中,我们经常会使用 * 懒加载 * ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都 ...

  4. ios开发——实战Swift篇&简单项目的实现

    学了这么久的swift语法和相关技术,今天忍不住手痒痒就写了一个swift的小项目,这个项目非常简单(只是使用一个UITableView),但是里面的功能却非常有用. 我们要实现的功能是这样的: 程序 ...

  5. iOS开发——常识swift篇&随机数获取

    随机数获取   arc4random()这个全局函数会生成9位数的随机整数   1,下面是使用arc4random函数求一个1~100的随机数(包括1和100)     var temp:Int = ...

  6. ios开发网络学习六:设置队列请求与RunLoop

    #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> ...

  7. iOS开发网络篇—数据缓存

      iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...

  8. iOS开发网络篇—发送json数据给服务器以及多值参数

    iOS开发网络篇—发送json数据给服务器以及多值参数 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 (2)设置请求头 (3)设置JSON数据为请求体 ...

  9. iOS开发网络篇—JSON数据的解析

    iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...

随机推荐

  1. 转载: Vim 练级攻略

    转自:http://coolshell.cn/articles/5426.html  酷壳 vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类, ...

  2. HDU 4911 Inversion

    http://acm.hdu.edu.cn/showproblem.php?pid=4911   归并排序求逆对数. Inversion Time Limit: 2000/1000 MS (Java/ ...

  3. bjfu1100 圆环

    这题也是2011百度之星的一道题.知道做法后代码极简单. 不过我做完后随便上网搜了一下,发现竟然还有很多不同的做法.别的做法我就不管了,我只把我的做法的原理说清楚.我做题时是按如下顺序逐步找到规律的: ...

  4. Android自带CalendarView类实现日历视图

    文章由来:学习一下日历控件的实现,Android3.0以下的版本请查阅其他文章. 本文主要是介绍Android日历视图控件CalendarView相关的内容,然后在后面会给出一个简单的Demo. Ca ...

  5. 使用 gradle 编译多版本 android 应用

    最近要做一个 android 产品的变种版本,需要编出不同版本,每个版本有不同的包名.图标等等,和一些特有的逻辑. 很久之前做过类似的工作,当时没有 gradle, 用的方法是把公共代码抽成一个 li ...

  6. C/C++:类模板

    类模板就是为类声明一种模板,使得类中的某些数据成员,或某些成员函数的参数,又或者是某些成员函数的返回值可以取任意的数据类型,包括基本数据类型和自定义数据类型. 类模板的声明形式如下: template ...

  7. Codeforces Round #363 (Div. 1) C. LRU

    题意: n个数,长度为k的缓存,每次询问,每个数以pi的概率被选,如果不在缓存区则加入,如果缓存区满了,则第一个进缓存的出来,问10^100次询问以后每个数在缓存的概率 思路: 状压DP,看了hzwe ...

  8. PyBayes的安装和使用

    PyBayes 主页 文档 PyBayes is an object-oriented Python library for recursive Bayesian estimation (Bayesi ...

  9. Spark SQL概念学习系列之为什么使用 Spark SQL?(二)

    简单地说,Shark 的下一代技术 是Spark SQL. 由于 Shark 底层依赖于 Hive,这个架构的优势是对传统 Hive 用户可以将 Shark 无缝集成进现有系统运行查询负载. 但是也看 ...

  10. homework 08_2 C++11新特性作业之二

    ---恢复内容开始--- 1.使用Lambda表达式计算“hello world!”中字母e和i的数量 下面是代码: #include "stdafx.h" #include< ...