1.Optional

Swift要求变量、常量都必须有个值,设置为空时编译会报错,所以Swift提出了可选。只要在变量类型后添加一个 '?' 标识符就可以。

var currentValue : Int? = nil
var x:String? = "Optional variable"
print(currentValue as Any)
print(x as Any)

currentValue = 1
x = nil
print(currentValue as Any)
print(x as Any)

2.三目运算: ? :

var i : Int? 
let ternary = i != nil ? i! : -1
print("Value of i is \(ternary)")//打印结果:-1

3.if-let

判断可选值是否有值;如果有值,将作为常量或变量的临时值。例如:

var desc: String? = "Optionals"

if let temp = desc{
  print(temp)
}
else{
 print("No description")
}

if-let是打开可选对象的推荐方法。

4. ?? : if-let的简化形式

var descripation = desc ?? "No description"

当desc有值时,descripation = desc;如果没有值,使用默认值"No description",有些类似三目运算

单个语句中包含多个可选绑定

我们可以在一个if语句中使用逗号分隔多个可选对象

var optionalX :String? = "x"
var optionalY :String? = "y"
if let x = optionalX, let y = optionalY
{
print(x) //prints "x"
print(y) //prints"y"
}
else{
print("One or more Optional can't be unwrapped")
}

但是上面方法有一个陷阱。如果其中一个可选值为空,都不符合if条件;所以上面的表达式只适合全部可选值都有值的情况,其他都走else方法。

5.guard

Guard类似于if条件,只是它只检查所有坏的情况。
某种情况来说,guard是if的倒置条件;除此之外,guard只工作在函数内部

func exampleGuard(){
    let didWeMeet = false
    guard !didWeMeet else {return}
    print("Did we meet?" + String(didWeMeet))
}
exampleGuard()

在上面的代码中,如果在guard关键字之后输入的条件失败,函数将执行else case并返回。

6.guard-let

var second:String? = nil
func guardStatements()
{
    guard let sa = second else{
        print("nil value")
        return
    }
    print(sa)
}
guardStatements() //打印结果: nil value

guard-let 与 if-let的区别

1.guard语句使早期退出成为可能,强调否定的情况,而if条件等待所有嵌套条件的传递
2.guard语句中的未包装值对于代码块的其余部分是可用的,而不需要强制/可选地再次展开

posted on 2021-06-22 11:08  蓬松小辉煌  阅读(271)  评论(0编辑  收藏  举报