或可选绑定的条件?
Posted
技术标签:
【中文标题】或可选绑定的条件?【英文标题】:OR condition for optional binding? 【发布时间】:2017-07-02 13:40:26 【问题描述】:我在Swift 3.1
文档中看到,您可以在if
语句中包含几个可选绑定,用逗号分隔,并且它的行为类似于AND
运算符。
假设我有两个可选属性,我想检查它们中的哪一个(或两者)不是nil
,解开非零属性,然后执行一段代码.使用这个:
if let = property1, let = property2
// Some task to do with unwrapped property
只有在两个属性都被解包(AND
条件)时才执行if
语句块。但对我来说,至少有一个属性为非零就足以执行if
语句块(OR
条件)中的代码。但如果我这样做:
if property1 != nil || property2 != nil
// Some task to do with non-nil property
但是我没有非 nil 属性的展开值。我希望在 if
语句代码块中提供未包装的值,以避免出现可选链接。
实现这一目标的最佳实践和最紧凑的方法是什么?
【问题讨论】:
【参考方案1】:这个怎么样。
if let property = property1 ?? property2
// non nil property (any one of the two)
如果property1
和property2
都具有值property1
,则获得优先级。
【讨论】:
【参考方案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)
这会优先考虑property1
【讨论】:
以上是关于或可选绑定的条件?的主要内容,如果未能解决你的问题,请参考以下文章
条件绑定:if let error - 条件绑定的初始化程序必须具有可选类型
条件绑定:if let error - 条件绑定的初始化程序必须具有可选类型