Swift學習筆記(3)iOS 9 中的網路請求

究極死胖獸發表於2016-05-17

Swift學習筆記(3)iOS 9 中的網路請求

目錄

編碼方法

在iOS9中,以前常用的stringByAddingPercentEscapesUsingEncoding方法被廢除了,取而代之的是stringByAddingPercentEncodingWithAllowedCharacters方法。

用法示例:

var strURL=String(format:"http://blog.csdn.net/sps900608")

//等價於strURL=strURL.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)        
strURL=strURL.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet(charactersInString:"`#%^{}\"[]|\\<> ").invertedSet)!

此外還可以如下寫法:

strURL=strURL.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLFragmentAllowedCharacterSet)!

NSCharacterSet常用的型別有以下:

    URLHostAllowedCharacterSet      "#%/<>?@\^`{|}

    URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}

    URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}

    URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}

    URLQueryAllowedCharacterSet     "#%<>[\]^`{|}

    URLUserAllowedCharacterSet      "#%/:<>?@[\]^`

請求方法

在iOS 9中NSURLConnection類被廢除,替代者是NSURLSession類
使用示例:

let session=NSURLSession.sharedSession()
        let dataTask=session.dataTaskWithRequest(request) { (data, reponse, error) -> Void in
            if (error != nil){
                NSLog("Error:\(error?.localizedDescription)")
            }
            else{
                self.webView.loadData(data!, MIMEType: "text/html", textEncodingName: "utf-8", baseURL: url)
            }
        }
        dataTask.resume()

NSURLsessionTask共有3個實體子類,應用於3種不同的場景,分別是NSURLSessionDataTask(資料請求)、NSURLSessionUploadTask(上傳)、NSURLSessionDownloadTask(下載),上述程式碼使用的是NSURLSessionDataTask(資料請求)。

其他修改

在iOS 9中,進行HTTP請求會報以下錯誤“Transport Security policy requires the use of a secure connection”,蘋果官方推薦使用安全性更好的HTTPS協議,如果仍要進行HTTP請求,可以進行以下修改
選擇info.plist,在Info.plist中新增App Transport Security Settings型別Dictionary。然後在App Transport Security Settings下新增Allow Arbitrary Loads型別Boolean,值設為YES。如下圖所示:

這裡寫圖片描述

完整程式碼

import UIKit

class ViewController: UIViewController {

    @IBOutlet var webView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        startRequest()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func startRequest(){

        var strURL=String(format:"http://blog.csdn.net/sps900608")
        strURL=strURL.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet(charactersInString:"`#%^{}\"[]|\\<> ").invertedSet)!

        let url=NSURL(string: strURL)!
        let request=NSURLRequest(URL: url)

        let session=NSURLSession.sharedSession()
        let dataTask=session.dataTaskWithRequest(request) { (data, reponse, error) -> Void in
            if (error != nil){
                NSLog("Error:\(error?.localizedDescription)")
            }
            else{
                self.webView.loadData(data!, MIMEType: "text/html", textEncodingName: "utf-8", baseURL:url)
            }
        }
        dataTask.resume()
    }

}

執行結果

這裡寫圖片描述

相關文章