1

我知道可以像这样使用保护语句

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

我试着做

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

但它似乎不起作用。

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

4

1 回答 1

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
于 2019-03-06T08:39:56.990 回答