swift URLSession之dataTask的使用

1,275 阅读1分钟

又被老视频坑了

先列代码,再一点点分析

以下代码是别人的:在别的网站上找到的 www.jianshu.com/p/7cec65324…

let urlString:String = "http://www.weather.com.cn/data/sk/101010100.html"
var url:URL!
    url = URL(string:urlString)
    //发出请求
    URLSession.shared.dataTask(with: url) { (objectData, response, error) in
    guard error == nil else {
    print("网络出错:\(error!.localizedDescription)")
    return
    }
                

    guard objectData != nil else {
        print("数据为空:")
        return
    }


    do {
        let jsonData = try JSONSerialization.jsonObject(with: objectData!, options: .mutableContainers)
        print(jsonData)

    } catch {
        print("解析出错")
    }

    }.resume()

NO1:设置URL

//原码
let urlString:String = "http://www.weather.com.cn/data/sk/101010100.html"
var url:URL!
url = URL(string:urlString)
//改进 一步到位
let url = URL(string: "http://www.weather.com.cn/data/sk/101010100.html")!

NO2:极简版 JSON反序列化

这种方法使用try! 如果崩掉就很麻烦,推荐下面这种

let url = URL(string: "http://www.weather.com.cn/data/sk/101010100.html")!
URLSession.shared.dataTask(with: url) { data, _, _ in
    let jsonData = try! JSONSerialization.jsonObject(with: data!, options: [])
    print(jsonData)
}.resume()
let url = URL(string: "http://www.weather.com.cn/data/sk/101010100.html")!
URLSession.shared.dataTask(with: url) { data, _, _ in
do {
    let jsonData = try JSONSerialization.jsonObject(with: data!, options: [])
    print(jsonData)

} catch {   // 如果反序列化失败,能够捕获到 json 失败的准确原因,而不会崩溃
    print(error)
}

}.resume()