func checkBtn () {
// btnDone.isEnabled = self.contactSelectViewList.count > 0 ? true : false
if self.contactSelectViewList.count > 0 {
btnDone.isEnabled = true
}
else {
if arrEmployeeCount?.count > 0 {
btnDone.isEnabled = true
}
else {
btnDone.isEnabled = false
}
}
}
如何使用三元运算符或更优化的方式编写此代码?
答案 0 :(得分:3)
我推荐这个:
btnDone.isEnabled = contactSelectViewList.count > 0 || (arrEmployeeCount?.count ?? 0) > 0
<强>说明强>
由于您有条件地将isEnabled
设置为布尔值,因此您可以使用该精确条件将值设置为if / else语句或三元运算符。换句话说,如果你正在使用:
if self.contactSelectViewList.count > 0 {
btnDone.isEnabled = true
}
然后您基本上说:如果self.contactSelectViewList.count > 0
为true
,则将btnDone.isEnabled
设置为true
。
因此,您可以轻松地重构代码,通过将其重写为:
来获得相同的结果btnDone.isEnabled = self.contactSelectViewList.count > 0
因为如果self.contactSelectViewList.count > 0
为真,那么它将被评估为
btnDone.isEnabled = true
否则将评估为:
btnDone.isEnabled = false
现在你的情况有点复杂,因为你有两个条件。但是通过阅读你的代码,我们可以告诉你,当这两个数组中至少有一个计数时,你想要启用按钮&gt;因此我们只需将条件更改为contactSelectViewList.count > 0
或(arrEmployeeCount?.count ?? 0) > 0
。其余的都是一样的。
??
运算符使用选项以在左侧为零时提供默认值。因此,如果arrEmployeeCount?.count
评估为nil,arrEmployeeCount?.count ?? 0
将评估为0
,因为我们将其作为默认值提供(我假设如果没有arrEmployeeCount
您想要把它看作好像有一个,但是空的。
您可能希望获得的解决方案是:
btnDone.isEnabled = contactSelectViewList.count > 0 || (arrEmployeeCount?.count ?? 0) > 0
当任一阵列不为空时启用按钮。您甚至可以考虑使用isEmpty
重构它以获得更好的可读性:
btnDone.isEnabled = !contactSelectViewList.isEmpty || !(arrEmployeeCount ?? []).isEmpty
(如果arrEmployeeCount ?? []
为arrEmployeeCount
,则nil
将提供一个空数组
答案 1 :(得分:1)
您可以将条件组合在一起,然后再进行无法优化。
建议不使用三元运算符在这种情况下会使您的代码难以阅读。
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
}
}
}
答案 2 :(得分:1)
根据您的示例,您可以使用ternary(?)
运算符执行此操作。
btnDone.isEnabled = contactSelectViewList.count > 0 ? true : (arrEmployeeCount.count > 0 ? true : false)
答案 3 :(得分:0)
我还要添加一个选项:
let isEnabled = (self.contactSelectViewList.count + arrEmployeeCount?.count) > 0
btnDone.isEnabled = isEnabled