如何使用三元运算符编写代码?
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 > 0
是true
,那么将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
(如果 arrEmployeeCount
为 nil
,arrEmployeeCount ?? []
将提供一个空数组)
让我再添加一个选项:
let isEnabled = (self.contactSelectViewList.count + arrEmployeeCount?.count) > 0
btnDone.isEnabled = isEnabled
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 > 0
是true
,那么将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
(如果 arrEmployeeCount
为 nil
,arrEmployeeCount ?? []
将提供一个空数组)
让我再添加一个选项:
let isEnabled = (self.contactSelectViewList.count + arrEmployeeCount?.count) > 0
btnDone.isEnabled = isEnabled