Swift.Extensions var和func。哪一个更好?

时间:2016-08-29 22:23:18

标签: ios swift macos

我是初学者。 这是代码

extension Double  {
    func abs1() -> Double  {
        return ( self > 0 ) ? self : -1.0 * self
    }

    var abs2 : Double {
        return ( self > 0 ) ? self : -1.0 * self
    }
}

我想知道,abs1()函数和abs2变量之间的区别是什么,它们如何工作以及哪一个更好?

1 个答案:

答案 0 :(得分:5)

它们的工作原理是一样的。这确实是意图的信号。我个人会推荐这种情况下的功能,这有点违反直觉,所以我会解释。

第一条规则是"它有副作用吗?"如果是这样,它应该是一个功能。

第二个规则是"是O(1)?" (这意味着"它需要一个常数,通常假设是短暂的,一段时间才能运行。"换句话说,它是否便宜?")如果不是,它就是它应该是一个功能。

但第三个更微妙的规则是"它是否合理地被视为"属性"实例?"在这种情况下,我会争辩,不。这与实例完全不同。它是实例上的 computed ,而不是实例的内部部分。用非计算属性替换它是相当荒谬的(你永远不会存储" 4"作为" abs"字段" -4& #34)。所以我会把它变成一个功能。

请注意,在Swift 3中,abs是该类型的静态函数(例如,它是Double.abs(4.0)而不是(4.0).abs)。这不会使您的问题无效,但鉴于此具体的案例,该团队选择如何处理该问题,我认为这是一种更好的方式。