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