最近老项目准备用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)
总结
用"!"强制解包的时候要慎重,做好容错处理有备无患。
网友评论