swiftiOS DeveloperiOS面试资料

Swift小笔记 | unexpectedly found ni

2017-08-17  本文已影响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)

总结

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

上一篇 下一篇

猜你喜欢

热点阅读