我在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
语句代码块中提供未包装的值,以避免在那里进行可选链接。
这是实现这一目标的最佳实践和最紧凑的方法吗?
答案 0 :(得分:1)
这个怎么样。
if let property = property1 ?? property2 {
// non nil property (any one of the two)
}
如果property1
和property2
都有值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