美文网首页swiftiOS DeveloperiOS面试资料
Swift小笔记 | unexpectedly found ni

Swift小笔记 | unexpectedly found ni

作者: Lol刀妹 | 来源:发表于2017-08-17 17:27 被阅读3864次

    背景

    开发中遇到几次了,记录一下。

    先自我翻译一下:解包的时候与nil不期而遇

    比如下面这段代码:

    let dict = ["first" : "1"]
    let str: String = (dict["second"])!
    print(str)
    

    运行后控制台报错:

    fatal error: unexpectedly found nil while unwrapping an Optional value

    崩溃的原因就是dict["second"]为nil,对nil强制取值而崩溃。

    项目中的崩溃就是这样导致的:后台返回的json跟你预期的不一致,你想在一个字典里强行取出一个不存在的key对应的value。

    容错处理

    方案一:使用可选链表表达式

    let dict = ["first" : "1"]
    let str: String? = dict["second"]
    print(str ?? "2") // 如果为空就打印“2”
    

    方案二:使用OC版的if判断

    let dict = ["first" : "1"]
    
    if (dict["second"] != nil) {
        print(dict["second"]!)
    } else {
        print("没这个key")
    }
    

    之所以称其为OC版的if,是因为它让我想到了OC。

    方案三:使用swift版的if判断

    let dict = ["first" : "1"]
    
    if let str: String = dict["second"] {
        print(str)
    } else {
        print("没这个key")
    }
    

    不得不说,这很swift。

    方案四:开启守护者模式

    let dict = ["first" : "1"]
    
    guard let str: String = dict["second"] else {
        print("没这个key")
        return
    }
    
    print(str)
    

    总结

    用"!"强制解包的时候要慎重,做好容错处理有备无患。

    相关文章

      网友评论

        本文标题:Swift小笔记 | unexpectedly found ni

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