Swift Dictionary found nil while unwrapping an Optional value

最近老项目准备用swift写,对swift不熟,造成很对低级错误

使用dictionary["key"]取值时:

let value = dictionary["key"] as! String

报错

diction unexpectedly found nil while unwrapping an Optional value

原因是dictionary不存在这个key,!强制解包时出现nil就会报这个错误

崩溃的原因就是dict["key"]为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)

总结

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。