Ios 如何使用三元运算符编写代码?

Ios 如何使用三元运算符编写代码?,ios,iphone,swift,optimization,ternary-operator,Ios,Iphone,Swift,Optimization,Ternary Operator,如何使用三元运算符或以更优化的方式编写此代码?您可以组合条件,但不可能进行优化 建议不要在这种情况下使用三元运算符,这样会使代码难以阅读 或者更好的解决方案,在更改计数时自动启用禁用按钮 if self.contactSelectViewList.count > 0 || arrEmployeeCount?.count > 0 { btnDone.isEnabled = true } else { btnDone.isEnabled = false } 根据

如何使用三元运算符或以更优化的方式编写此代码?

您可以组合条件,但不可能进行优化

建议不要在这种情况下使用三元运算符,这样会使代码难以阅读

或者更好的解决方案,在更改计数时自动启用禁用按钮

if self.contactSelectViewList.count > 0  || arrEmployeeCount?.count > 0 {
    btnDone.isEnabled = true
} else {
    btnDone.isEnabled = false

}  

根据您的示例,您可以使用
三元(?)
运算符执行此操作

var contactSelectViewList = [Int]()  {
    didSet {
        if !contactSelectViewList.isEmpty ||  (arrEmployeeCount?.count ?? 0) > 0  {
            btnDone.isEnabled = true
        } else {
            btnDone.isEnabled = false

        }
    }
}

var arrEmployeeCount : [Int]? {
    didSet {
        if !contactSelectViewList.isEmpty ||  (arrEmployeeCount?.count ?? 0) > 0  {
            btnDone.isEnabled = true
        } else {
            btnDone.isEnabled = false

        }
    }
}
我建议:

btnDone.isEnabled = contactSelectViewList.count > 0 ? true : (arrEmployeeCount.count > 0 ? true : false)
解释

由于要有条件地将
isEnabled
设置为布尔值,因此可以使用该确切条件将值设置为drop if/else语句或三元运算符。换句话说,如果您正在使用:

btnDone.isEnabled = contactSelectViewList.count > 0 || (arrEmployeeCount?.count ?? 0) > 0
然后你基本上是说:如果
self.contactSelectViewList.count>0
true
,那么将
btnDone.isEnabled
设置为
true

因此,通过将代码重写为以下内容,您可以轻松重构代码以获得相同的结果:

if self.contactSelectViewList.count > 0 {
    btnDone.isEnabled = true
}
因为如果
self.contactSelectViewList.count>0
为真,则其计算结果为

btnDone.isEnabled = self.contactSelectViewList.count > 0
否则将被评估为:

btnDone.isEnabled = true
现在你的情况有点复杂,因为你有两个条件。但是通过阅读您的代码,我们可以知道您想要的是在这两个数组中至少有一个的count>0时启用该按钮。因此,我们只需将条件更改为
contactSelectViewList.count>0
(arEmployeeCount?.count??0)>0
。再说一遍,其余的都是一样的

??
操作员与optionals一起工作,以在左侧为nil时提供默认值。因此,如果
aremployeecount?.count
的计算结果为零,
aremployeecount?.count??0
将被评估为
0
,因为我们将其作为默认值提供(我假设如果没有
aremployeecount
,您希望将其视为有一个,但为空

因此,您可能想要的解决方案是:

btnDone.isEnabled = false
当任何一个数组都不是空的时,可以启用“p>按钮”。您甚至可以考虑使用“代码> iSoWiS/<代码>对其进行重构以获得更好的可读性:

btnDone.isEnabled = contactSelectViewList.count > 0 || (arrEmployeeCount?.count ?? 0) > 0

aremployeecount???[]
将提供一个空数组,如果
aremployeecount
nil

我还要添加一个选项:

btnDone.isEnabled = !contactSelectViewList.isEmpty || !(arrEmployeeCount ?? []).isEmpty

它很完美,有什么问题吗?我只看到一个格式化问题,它将else块放到一个较低的行
三元运算符!=优化代码

btnDone.isEnabled = !contactSelectViewList.isEmpty || !(arrEmployeeCount ?? []).isEmpty
let isEnabled = (self.contactSelectViewList.count + arrEmployeeCount?.count) > 0
btnDone.isEnabled = isEnabled