天天看点

Swift 2.0 异步网络请求从网页获取json,并转化为NSArray,遍历得到其中数据.

class func parseJSONData(data: AnyObject?) ->NSArray? {//将json转化为NSArray
        do{
            let downloadData=data as? NSData
            let jsonObject = try NSJSONSerialization.JSONObjectWithData(downloadData!, options: NSJSONReadingOptions.MutableContainers) as? NSArray
            return jsonObject
        }catch{
            
        }
        return nil
    }
    
    class func request(urlString urlString: String?,completion: (data: NSArray?) -> Void){//异步网络请求获取json
        if urlString == nil {
            dispatch_async(dispatch_get_main_queue(),{ () -> Void in
                print("urlString 为空")
                completion(data: nil)
            })
        }
        
        let url = NSURL(string: urlString!)//获取json的url
        let request = NSURLRequest(URL: url!)
        let queue = NSOperationQueue()
        NSURLConnection.sendAsynchronousRequest(request, queue: queue) {
            (response, data, error) -> Void in
            let httpResponse = response as? NSHTTPURLResponse
            let code=httpResponse?.statusCode
            if code==200{
                let parseData = self.parseJSONData(data)
                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    completion(data: parseData)//将json转化为NSArray后返回.
                })
            }else{
                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    print(error)
                    // 请求出现,则返回nil对象表示
                    completion(data: nil)
                })
            }
        }
    }
           

由于ios9.0以后引入了http传输安全协议,所以只支持https请求,要使用http请求,需要在info.plist中的添加如下代码:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
           

调用request获取到NSArray之后,遍历得到其中的数据.

HttpRequest.request(urlString: url) { (data) -> Void in
            
            if data == nil {
                let alertView = UIAlertView()
                alertView.title = "温馨提示"
                alertView.message = "加载失败"
                alertView.addButtonWithTitle("确定")
                alertView.addButtonWithTitle("取消")
                alertView.show()
            }else {
                let itemArray = data
                for (var i = 0 ; i < itemArray!.count ; i++){
                    NSLog(itemArray![i].valueForKey("keyName")!.description, "debug")}}}