【问题标题】:How to Write Code Using Ternary operator?如何使用三元运算符编写代码?
【发布时间】:2018-06-27 08:01:03
【问题描述】:
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
        }
    }
}

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

【问题讨论】:

  • 完美了,有什么问题?
  • 我只看到了一个格式问题,将 else 块放到了下一行
  • Ternary operator != Optimised Code

标签: ios iphone swift optimization ternary-operator


【解决方案1】:

我推荐这个:

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 评估为 nil,arrEmployeeCount?.count ?? 0 将评估为 0,因为我们提供了它作为默认值(我假设如果没有 arrEmployeeCount 你想把它当作有一个,但是是空的。

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        让我也添加一个选项:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-16
          • 2011-07-08
          • 2012-06-23
          • 2016-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-09-24
          相关资源
          最近更新 更多