Swift - 编写 if else 的最佳方式

标签 swift if-statement

我想根据某个表达式将一个 bool 值赋给一个变量。这是我的代码

方法一:

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

方法二:

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

我知道第二个更具可读性,但它对执行速度有什么影响吗。

最佳答案

I understand that the second one is more readable

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

will it make any difference in execution speed?

如上所述 - 分析您的应用并了解性能 瓶颈。然后你可以决定这个特定的部分是否需要 有待改进。

在这种特殊情况下它根本不会产生影响, 编译器足够聪明,可以优化这两种变体。 这是一个简化的独立示例:两者

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

关于Swift - 编写 if else 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50481427/

相关文章:

ios - 使用 NSAttributedString 为 UITextView 中的文本着色真的很慢

javascript - Javascript 中最长的公共(public)前缀

r - dplyr::rename() 如果满足列内容的条件

iOS 8 : Background execution

swift - 在 Vapor,Swift 中添加资源路由?

arrays - double 组到 CLLocationCoordinate2D 数组

ios - 警报中预加载的文本

java - 在新方法中使用 boolean 结果时出错 - 需要字符串,但找到 boolean 值

python - 如何测试多个变量与单个值的相等性?

javascript:检查是否存在多个特定对象属性(也在coffeescript中)