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

How to Write Code Using Ternary operator?

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
        }
    }
}

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

您可以组合其他条件,但无法进行优化。

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

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

        }
    }
}

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

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

我推荐这个:

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

解释

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

if self.contactSelectViewList.count > 0 {
    btnDone.isEnabled = true
}

那么你基本上是在说:如果self.contactSelectViewList.count > 0true,那么将btnDone.isEnabled设置为true

因此,您可以通过将代码重写为:

轻松重构代码以获得相同的结果
btnDone.isEnabled = self.contactSelectViewList.count > 0

因为如果self.contactSelectViewList.count > 0为真,那么它将被评估为

btnDone.isEnabled = true

否则会被计算为:

btnDone.isEnabled = false

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

?? 运算符与可选项一起使用,以在左侧为 nil 时提供默认值。因此,如果 arrEmployeeCount?.count 计算为零,arrEmployeeCount?.count ?? 0 将被计算为 0,因为我们将其作为默认值提供(我假设如果没有 arrEmployeeCount 你想要把它当作有一个,但是是空的。

所以您可能想要的解决方案是:

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

当任一数组不为空时启用按钮。您甚至可以考虑使用 isEmpty 重构它以获得更好的可读性:

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

(如果 arrEmployeeCountnilarrEmployeeCount ?? [] 将提供一个空数组)

让我再添加一个选项:

let isEnabled = (self.contactSelectViewList.count + arrEmployeeCount?.count) > 0
btnDone.isEnabled = isEnabled