OR条件可选绑定?

时间:2017-07-02 13:40:26

标签: swift3 optional unwrap optional-binding

我在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语句代码块中提供未包装的值,以避免在那里进行可选链接。

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

2 个答案:

答案 0 :(得分:1)

这个怎么样。

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

如果property1property2都有值property1获得优先权。

答案 1 :(得分:1)

不幸的是,我认为这不可能在一行(如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)
}

将优先考虑property1