对于一些可选值,一般最好颠末判断之后确定其不为nil的情况下,再去用!欺压解包,这是可以通过if来举行判断。但是过多利用if判断会让代码看起来很缭乱。Swift中提供了if let和guard let办理这个题目。
if let
func demo() { let name: String? = "老王" let age: Int? = 10 //if let 连用,判断对象的值是否为nil,假如不为nil,直接实行if中的代码 if let nName = name, let nAge = age { //这里的name和age肯定有值 print(nName + String(nAge)) //留意:这里的nName和nAge仅在作用域内有用 }else{ print("name或age有一个为空") } }guard let:guard let和if let刚好相反,guard let保卫肯定有值。假如没有,直接返回
func demo() { let name: String? = "老王" let age: Int? = 10 guard let nName = name, let nAge = age else{ print("name或age有一个为空") return } //代码到此,nName和nAge肯定有值。 //假如只是直接利用if let会凭空多了一个分支,guard let可以低落分支的层次。一般在解包的时间guard let用的相对比力频仍。 print(nName + String(nAge)) }关于if let和guard let的明白,可以参考guard和if的用法中的解释:根据关键字之后的表达式的布尔值决定下一步实行什么!
//eg:此处对于if let就不能团体明白,if反面跟了三个条件,let data = FileManager.default.contents(atPath: filePath)为条件一,persionAge > 18为条件二,persionAge < 60位条件三。因此按照guard和if关键字在官方文档的解释区明白才是精确的。 if let data = FileManager.default.contents(atPath: filePath), persionAge > 18, persionAge < 60 { return User.user(data) } return nil延伸:if 和if let
1.假如常量是可选项(Optional),if判断后仍旧必要解包(!)
let name: String? = "老王"let age: Int? = 10if name != nil && age != nil { print(name! + String(age!)) // 输出:老王10}2.假如常量是可选项(Optional),if let判断后不必要解包(!),{ }内肯定有值
let name: String? = "老王"let age: Int? = 10// if let 连用,判断对象的值是否为'nil'if let nameNew = name, let ageNew = age { // 进入分支后,nameNew 和 ageNew 肯定有值 print(nameNew + String(ageNew)) // 输出:老王10} |