Swift 在一个if语句中快速展开多个相互依赖的选项
我知道,您可以使用if-let语法在一行中展开多个选项,如下所示Swift 在一个if语句中快速展开多个相互依赖的选项,swift,optional,Swift,Optional,我知道,您可以使用if-let语法在一行中展开多个选项,如下所示 if let x = optionalX, y = optionalY { //do something } 我想要的是在一行中展开相互依赖的多个选项。现在看起来是这样的 if let a = optionalA { if let ab = a.optionalB { if let abc = ab.optionalC { //do something }
if let x = optionalX, y = optionalY {
//do something
}
我想要的是在一行中展开相互依赖的多个选项。现在看起来是这样的
if let a = optionalA {
if let ab = a.optionalB {
if let abc = ab.optionalC {
//do something
}
}
}
在我看来,这看起来真的不干净,尤其是如果你还想要其他案例,因为你必须将其添加到每个案例中。我想要的东西看起来像这样,但它不起作用
if let a = optionalA, ab = a.optionalB {
//do something
}
更新
以上代码确实有效
我在其他地方发生了一个错误,这使它看起来像是语句中发生的错误。您可以这样做:
guard let a = optionalA,
let b = a.optionalB,
let c = b.optionalC
else {
// else implementation
return
}
// do something with constants a, b and c
你可以这样做:
guard let a = optionalA,
let b = a.optionalB,
let c = b.optionalC
else {
// else implementation
return
}
// do something with constants a, b and c
问题在于类声明,而不是可选的
classA
应该更像:
classA {
let optionalB : B? = nil
}
问题在于类声明,而不是可选的
classA
应该更像:
classA {
let optionalB : B? = nil
}
你可以(也许是2.3)。为了使编译器能够区分可选的展开,您需要在每个逗号后再次写入let
:
if let a = optionalA,
let ab = a.optionalB {
// Do stuff
}
你可以(也许是2.3)。为了使编译器能够区分可选的展开,您需要在每个逗号后再次写入let
:
if let a = optionalA,
let ab = a.optionalB {
// Do stuff
}
如果只希望使用
a
(typea
)的(可能)实例内部变量b
(typeb
),则可以在单个可选绑定子句中使用可选链接
class A {
var optionalB : B?
}
class B {}
var optionalA : A?
// in case you needn't actually use optionalA, but only its
// possibly non-nil instance member `optionalB`
if let b = optionalA?.optionalB {
//do something with b
}
如果只希望使用
a
(typea
)的(可能)实例内部变量b
(typeb
),则可以在单个可选绑定子句中使用可选链接
class A {
var optionalB : B?
}
class B {}
var optionalA : A?
// in case you needn't actually use optionalA, but only its
// possibly non-nil instance member `optionalB`
if let b = optionalA?.optionalB {
//do something with b
}
你可以做到。如果您有一些错误,请提供给我们;应该没有错误。您在测试代码中忘记了
选项B:B?
中的var
。否则,它将按预期编译和运行。如果您更好地使用,它将显示此错误。我忘记了var,但不知何故,当我在xCode中使用更复杂的代码和在线测试时,我没有看到它。对不起,我太愚蠢了!你可以做到。如果您有一些错误,请提供给我们;应该没有错误。您在测试代码中忘记了选项B:B?
中的var
。否则,它将按预期编译和运行。如果您更好地使用,它将显示此错误。我忘记了var,但不知何故,当我在xCode中使用更复杂的代码和在线测试时,我没有看到它。对不起,我太愚蠢了!我最喜欢这个答案,因为它是一个很好的选择。应该注意的是,问题中的语法也适用。您在问题中使用的语法适用于Swift 2.2。Swift 3.0需要添加let
来指定它是一个可选的展开。我最喜欢这个答案,因为它是一个不错的选择。应该注意的是,问题中的语法也适用。您在问题中使用的语法适用于Swift 2.2。Swift 3.0要求添加let
,以指定它是可选的展开。