Swift - 写一个if else的最好方法

Dee*_*rse 0 if-statement swift

我想根据某个表达式为变量赋一个布尔值.这是我的代码

方法1:

    if jobListView.tableView.jobIds.count > 0 {
        container.isHidden = false
    } else {
        container.isHidden = true
    }
Run Code Online (Sandbox Code Playgroud)

方法2:

    container.isHidden = jobListView.tableView.jobIds.count <= 0
Run Code Online (Sandbox Code Playgroud)

我知道第二个更具可读性,但它会对执行速度产生任何影响.

Mar*_*n R 6

我知道第二个更具可读性

这是一个很好的论据.从(或您的团队)更熟悉的版本开始.

会不会对执行速度产生任何影响?

如上所述 - 配置您的应用程序并找到性能瓶颈.然后,您可以决定是否需要改进此特定部分.

在这种特殊情况下,它根本不会产生任何影响,编译器足够智能以优化两种变体.这是一个简化的自包含示例:两者

var hidden = false

func foo(n: Int) {
    if n > 0 {
        hidden = false
    } else {
        hidden = true
    }
}
Run Code Online (Sandbox Code Playgroud)

var hidden = false

func foo(n: Int) {
    hidden = n <= 0
}
Run Code Online (Sandbox Code Playgroud)

生成相同的汇编代码

    .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
Run Code Online (Sandbox Code Playgroud)

你可以验证

swiftc -O -emit-assembly main.swift