2

我在Swift 3.1文档中看到您可以在以逗号分隔的语句中包含几个可选绑定if,并且它的行为类似于AND运算符。

假设我有两个可选属性,我想检查它们中的哪一个(或两者)是/不是nil,解开非零属性,然后执行一段代码。使用这个:

if let = property1, let = property2 {
   // Some task to do with unwrapped property 
}

if仅当两个属性都展开(AND条件)时才执行语句块。但对我来说,至少有一个属性为非零就足以执行if语句块(OR条件)中的代码。但如果我这样做:

if property1 != nil || property2 != nil {
   // Some task to do with non-nil property
}

但是我没有非零属性的展开值。我想在if代码的语句块中提供未包装的值,以避免那里的可选链接。

哪个是实现这一目标的最佳实践和最紧凑的方法?

4

2 回答 2

3

这个怎么样。

if let property = property1 ?? property2 {
    // non nil property (any one of the two)
}

ifproperty1property2both have valuesproperty1优先。

于 2017-07-02T14:38:54.400 回答
2

不幸的是,我认为这在一行中是不可能的(比如if let x = y || let z = a {})。从逻辑上讲,这没有意义,因为您最终会处于两个变量都保持可选的状态(如果其中一个被解包,您不知道哪个被解包,或者两者都是)。我认为您需要采取其他方法来解决此问题。我认为最简单的形式是

if let unwrappedProperty1 = property1 {
    handleProperty(unwrappedProperty1)
} else if let unwrappedProperty2 = property2 {
    handleProperty(unwrappedProperty2)
}

或者你可以做类似的事情

if let unwrappedProperty = property1 ?? property2 {
    handleProperty(unwrappedProperty)
}

这将优先考虑财产1

于 2017-07-02T14:39:33.377 回答