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