在swift中,允许以下语法进行流控制
if let constantName = someOptional {
statements
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,真值背景的语义是什么?
是否允许表达链(如下所示)?
if let constantName = someOptional && constantName2 = someOptional2 {
statements
}
Run Code Online (Sandbox Code Playgroud)
如果是这样,布尔表达式是否短路?
Das*_*ash 22
首先someOptional检查它是否为零或有数据.如果它为零,那么if语句就不会被执行.如果有数据,则数据将被解包并分配给constantNameif语句的范围.然后执行大括号内的代码.
if let constantName = someOptional {
statements
}
Run Code Online (Sandbox Code Playgroud)
没有办法在一个if语句中链接此功能.let constantName = someOptional不直接评估为布尔值.最好将"if let"视为特殊关键字.
Van*_*ran 18
在Swift 1.2和2.1中,您可以这样做:
if let constantName = someOptional, constantName2 = someOptional2 {
// statements
}
Run Code Online (Sandbox Code Playgroud)
你不能像这样链接可选的绑定:
if let constantName = someOptional && constantName = someOptional2 {}
但是在Swift 1.2中你可以这样写:
if let constantName = someOptional, constantName = someOptional2 {}
这里发生了什么?
Optionals是他们自己的类型,是Swift提供编译时检查的方式nil.当您键入时,var potentialValue : Int?您没有使用某些特殊的Int,您使用的是Optional类型,它实际上是一个空枚举.这就是为什么你经常需要打开可选项,!因为这允许你访问里面的内容(如果里面有任何东西).如果可选项不包含任何值(即枚举为空),则其值为None.如果optional不是空的,那么它的值Some和您使用的任何类型的关联值 - 所以在这种情况下是Int.
这个:
if (someOptional != nil){
let constantName = someOptional!
}
Run Code Online (Sandbox Code Playgroud)
与使用此相同:
if let constantName = someOptional {}
Run Code Online (Sandbox Code Playgroud)
这被称为可选绑定.你会注意到这里的第二个版本更具可读性,你不必使用它来显式展开可选项!.
当可选项的值为Some和不是时,它的计算结果为true None- 换句话说,当optional的值不为nil时.(请注意,您仍然可以检查nil是否喜欢,也可以None通过写入更改可选的值someOptional = nil.
还没有提到的其他内容是你可以使用??(称为nil coalescing运算符)来提供一个可选的默认值(如果它没有).例如:
let constantName = someOptional ?? 100
Run Code Online (Sandbox Code Playgroud)
someOptional如果它有一个值,这里将被解包,但如果它没有,那么将100使用该值.
我发现有用的是记住选项是Swift中自己的类型.它们不是您所说的类型的精美版本.
| 归档时间: |
|
| 查看次数: |
16365 次 |
| 最近记录: |