標籤:
NSURL進行資料請求(POST與GET) 使用Swift進行iOS開發時,不可避免的要進行遠端資料擷取和提交。其資料請求的方式既可能是POST也可能是GET。同不管是POST還是GET又可以分為同步請求和非同步請求。下面通過四個例子來進行示範。 1,使用POST方式提交資料(使用者id和分數)(1)同步請求
1 //儲存分數 2 func saveScore(score:Int, userid:String) 3 { 4 let urlString:String = "http://hangge.com/" 5 var url:NSURL! 6 url = NSURL(string:urlString) 7 var request = NSMutableURLRequest(URL:url) 8 var body = "score=\(score)&user=\(userid)" 9 //編碼POST資料10 var postData = body.dataUsingEncoding(NSUTF8StringEncoding)11 //保用 POST 提交12 request.HTTPMethod = "POST"13 request.HTTPBody = postData14 15 //響應對象16 var response:NSURLResponse?17 //錯誤對象18 var error:NSError?19 20 //發出請求21 var received:NSData? = NSURLConnection.sendSynchronousRequest(request,22 returningResponse: &response, error: &error)23 24 if(error != nil){25 println(error?.code)26 println(error?.description)27 }else{28 var datastring = NSString(data:received!, encoding: NSUTF8StringEncoding)29 println(datastring)30 }31 }
(2)非同步請求
1 import UIKit 2 3 class ScoreController:NSObject, NSURLConnectionDataDelegate 4 { 5 //儲存分數 6 func saveScore(score:Int, userid:String) 7 { 8 let urlString:String = "http://hangge.com/savescore.php" 9 var url:NSURL!10 url = NSURL(string:urlString)11 var request = NSMutableURLRequest(URL:url)12 var body = "score=\(score)&user=\(userid)"13 //編碼POST資料14 var postData = body.dataUsingEncoding(NSASCIIStringEncoding)15 //保用 POST 提交16 request.HTTPMethod = "POST"17 request.HTTPBody = postData18 var conn:NSURLConnection!19 conn = NSURLConnection(request: request,delegate: self)20 conn.start()21 println(conn)22 }23 24 func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!)25 {26 println("請求成功!");27 println(response)28 }29 30 func connection(connection: NSURLConnection!, didReceiveData data: NSData!)31 {32 println("請求成功1!");33 var datastring = NSString(data:data, encoding: NSUTF8StringEncoding)34 println(datastring)35 }36 37 func connectionDidFinishLoading(connection: NSURLConnection!)38 {39 println("請求成功2!");40 }41 }
2,使用GET方式擷取資料(使用者id對應的分數)(1)同步請求
1 //擷取分數 2 func getScore(user:String){ 3 4 let urlString:String="http://hangge.com/getscore.php?user=\(user)" 5 var url:NSURL! 6 url = NSURL(string:urlString) 7 var request = NSMutableURLRequest(URL:url) 8 request.HTTPMethod = "GET" 9 10 //響應對象11 var response:NSURLResponse?12 //錯誤對象13 var error:NSError?14 15 //發出請求16 var received:NSData? = NSURLConnection.sendSynchronousRequest(request,17 returningResponse: &response, error: &error)18 19 if(error != nil){20 println(error?.code)21 println(error?.description)22 }else{23 var datastring = NSString(data:received!, encoding: NSUTF8StringEncoding)24 println(datastring)25 }26 }
(2)非同步請求
1 import UIKit 2 3 class ScoreController:NSObject, NSURLConnectionDataDelegate 4 { 5 //擷取分數 6 func getScore(user:String) 7 { 8 let urlString:String="http://hangge.com/getscore.php?user=\(user)" 9 var url:NSURL!10 url = NSURL(string:urlString)11 var request = NSMutableURLRequest(URL:url)12 13 var body = "user=\(user)"14 request.HTTPMethod = "GET"15 var conn:NSURLConnection!16 conn = NSURLConnection(request: request,delegate: self)17 conn.start()18 println(conn)19 }20 21 func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!)22 {23 println("請求成功!");24 println(response)25 }26 27 func connection(connection: NSURLConnection!, didReceiveData data: NSData!)28 {29 println("請求成功1!");30 var datastring = NSString(data:data, encoding: NSUTF8StringEncoding)31 println(datastring)32 //解析 JSON 資料33 var json : AnyObject! = NSJSONSerialization.JSONObjectWithData(data,34 options:NSJSONReadingOptions.AllowFragments,error:nil)35 36 var score = json.objectForKey("score") as Int37 println(score)38 }39 40 func connectionDidFinishLoading(connection: NSURLConnection!)41 {42 println("請求成功2!");43 }44 }
iOS開發——網路Swift篇&NSURL進行資料請求(POST與GET)