代码之家  ›  专栏  ›  技术社区  ›  Deepak Terse

Swift-写if-else的最佳方法

  •  0
  • Deepak Terse  · 技术社区  · 7 年前

    我想根据一个特定的表达式给一个变量分配一个布尔值。这是我的密码

    方法1:

        if jobListView.tableView.jobIds.count > 0 {
            container.isHidden = false
        } else {
            container.isHidden = true
        }
    

    方法2:

        container.isHidden = jobListView.tableView.jobIds.count <= 0
    

    我知道第二个更易读,但它会对执行速度产生任何影响吗?

    1 回复  |  直到 7 年前
        1
  •  6
  •   Martin R    7 年前

    我知道第二个更易读

    这是一个很好的论点。从版本开始 (或你的团队)更舒服。

    在执行速度上会有什么不同吗?

    如上所述,对你的应用程序进行分析并找到性能 瓶颈。然后你可以决定这个特殊的部分是否需要 有待改进。

    在这种特殊情况下 这一点都不重要, 编译器足够聪明,可以优化这两种变体。 下面是一个简单的自包含的示例:两者都是

    var hidden = false
    
    func foo(n: Int) {
        if n > 0 {
            hidden = false
        } else {
            hidden = true
        }
    }
    

    var hidden = false
    
    func foo(n: Int) {
        hidden = n <= 0
    }
    

    生成 完全相同的 程序集代码

        .private_extern __T04main3fooySi1n_tF
        .globl  __T04main3fooySi1n_tF
        .p2align    4, 0x90
    __T04main3fooySi1n_tF:
        pushq   %rbp
        movq    %rsp, %rbp
        testq   %rdi, %rdi
        setle   __T04main6hiddenSbvp(%rip)
        popq    %rbp
        retq
    

    你可以用

    swiftc -O -emit-assembly main.swift