"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 = b
和 a = b
会以某种方式有一个布尔值,当它失败时它是错误的,但是 guard let
和 guard
实际上是完全不同的吗?
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
我知道 guard 语句可以这样使用
guard let someConstant = someOptional() else {
// ...
}
我也尝试过
struct MyStruct {
let aString: String
init?() {
guard aString = optionalString() else { return }
}
// ...
不过好像不行。
我假设 let a = b
和 a = b
会以某种方式有一个布尔值,当它失败时它是错误的,但是 guard let
和 guard
实际上是完全不同的吗?
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