或可选绑定的条件?

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)

如果property1property2 都具有值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

【讨论】:

以上是关于或可选绑定的条件?的主要内容,如果未能解决你的问题,请参考以下文章

快速获取条件绑定的错误初始化程序必须具有可选类型,为啥?

在 C# 4.0 中是不是应该使用重载或可选参数声明方法?

条件绑定:if let error - 条件绑定的初始化程序必须具有可选类型

条件绑定:if let error - 条件绑定的初始化程序必须具有可选类型

ios:条件绑定的初始化程序必须具有可选类型,而不是“LOTAnimationView”

无需重新分配变量即可展开 Swift 可选