我知道可以像这样使用保护声明
guard let someConstant = someOptional() else {
// ...
}
我试图做
struct MyStruct {
let aString: String
init?() {
guard aString = optionalString() else { return }
}
// ...
但它似乎不起作用。
我假设let a = b
和a = b
在失败时会以某种方式具有布尔值,但实际上是完全不同的guard let
和guard
吗?
答案 0 :(得分:1)
if
语句中的可选绑定是这样的:它检查给定值是否具有值,以及是否具有与此值一起到达if
块的值
if let constant = optional {
constant
}
在guard
语句中使用可选绑定,它检查值是否存在,如果存在,则在当前范围内继续,并在此范围内分配变量/常量
guard let constant = optional else { ... }
constant
因此,对于初始化程序,您需要分配常量,因此需要使用let
关键字,并且由于初始化器是可选的,因此,如果初始化失败,则需要返回nil
guard let aString = optionalString() else { return nil }
self.aString = aString