“守卫让”和“如果让”与“守卫”和“如果”是否不同?

时间:2019-03-06 08:29:43

标签: swift optional guard-statement

我知道可以像这样使用保护声明

guard let someConstant = someOptional() else {
    // ...
}

我试图做

struct MyStruct {
    let aString: String
    init?() {
        guard aString = optionalString() else { return }
    }
// ...

但它似乎不起作用。

我假设let a = ba = b在失败时会以某种方式具有布尔值,但实际上是完全不同的guard letguard吗?

1 个答案:

答案 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