美文网首页iOS
Swift中数据的错误处理-三种try的使用

Swift中数据的错误处理-三种try的使用

作者: 下班不写程序 | 来源:发表于2019-10-08 19:49 被阅读0次

    通过一段代码来了解数据的错误处理:

    import UIKit
    
    /* 知识点:
     从对象 到 二进制数据的过程 一般称为对象的序列化(Serialization),也称为归档(Archive).
     同理,从二进制数据 到 对象的过程 一般称为反序列化或者反归档.
     */
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
    
            loadData()
        }
        
        // 请求数据
        func loadData(){//
            // 请求的url (实测: 返回结果为json)
            let url = URL(string: "http://www.weather.com.cn/data/sk/101010100.html")
    //        let url = URL(string: "http://www.baidu.com")
            
            // guard判断url 是否为nil
            guard let u = url else {
                return
            }
            
            // 实例化request
            let request = URLRequest(url: u)
            
            // 发送请求
            URLSession.shared.dataTask(with: request) { (data, _, error) in
                
                // 错误判断
                if error != nil {
                    print(error!)
                    return
                }
                
                // 判断data 是否有值
                guard let d = data else{
                    return
                }
    
                // 出现问题: 正常情况下, 将Json 反序列化为字典, 但是正常写了会报错
                // 报错内容: Call can throw, but it is not marked with 'try' and the error is not handled
                // 报错原因: 调用可能够抛出异常, 因为没有标记try, 也未作错误处理. 系统处理的一种方式而已.
                // 解决方法: 既然说了没有标记try, 那就标记即可.
    //            let dict = JSONSerialization.jsonObject(with: d, options: [])
                
                // 解决方式一: 强行try (try!)
                // 存在问题: 当请求结果不是标准的json数据时, 会造成程序崩溃
                // 也就是说: url为天气的链接时, 就会正常使用; 而url为百度的链接时, 就会崩溃.
    //            let dict = try! JSONSerialization.jsonObject(with: d, options: [])
                
                
                // 解决方式二: 可选try (try?)
                // 特点: 能反序列化成功, 就给你返回成功的值; 不能成功就给你返回nil
    //            let dict = try? JSONSerialization.jsonObject(with: d, options: [])
                
                // 打印结果
    //            print(dict)
                
                // 解决方式三: 默认try (try)
                // 注意: 一定要配合 do{}catch{} 使用
                do{
                    let dict = try JSONSerialization.jsonObject(with: d, options: [])
                    print(dict)
                }catch{
                    // catch 中默认提供error信息, 当序列化不成功是, 返回error
                    print(error)
                }
            }.resume()
        }
    }
    

    相关文章

      网友评论

        本文标题:Swift中数据的错误处理-三种try的使用

        本文链接:https://www.haomeiwen.com/subject/neyauctx.html