"guard let" 和 "if let" 是否与 "guard" 和 "if" 不同?

Are "guard let" and "if let" different statements than "guard" and "if"?

我知道 guard 语句可以这样使用

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

我也尝试过

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

不过好像不行。

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

if 语句中的可选绑定是这样工作的:它检查给定值是否有值,如果有,它会与该值一起进入 if

if let constant = optional {
    constant
}

guard 语句中使用可选绑定,它检查值是否存在,如果存在,它会在当前范围内继续,并在此范围内分配变量/常量

guard let constant = optional else { ... }
constant

因此,对于您的初始化器,您需要分配常量,因此您需要使用 let 关键字,并且由于您的初始化器是可选的,如果初始化失败,您需要 return nil

guard let aString = optionalString() else { return nil }
self.aString = aString