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语句中的未包装值对于代码块的其余部分是可用的,而不需要强制/可选地再次展开