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

我是初学者。 这是代码

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

我想知道,abs1()函数和abs2variables有什么区别,它们是如何工作的,哪一个更好?

他们的工作方式是一样的。 这确实是一个意图的信号。 就个人而言,我会build议在这种情况下的function,这是有点反直觉,所以我会解释。

第一条规则是“是否有副作用?” 如果是这样,那应该是一个function。

第二个规则是“是O(1)?” (这意味着“需要一个常数,而且通常假设是短时间运行”。换句话说,它是“便宜”吗?)如果不是,它应该是一个函数。

但第三个更微妙的规则是“合理地认为是这个实例的”财产“吗? 在这种情况下,我会说,不。 这与实例完全不同。 它是在实例上计算的,而不是实例的固有部分 。 这将被一个非计算属性(你不会将“4”作为“-4”的“abs”字段存储)replace这将是相当荒谬的。 所以我会做一个function。

请注意,在Swift 3中, abs是types上的静态函数(例如,它是Double.abs(4.0)而不是(4.0).abs )。 这并不能使你的问题无效,但考虑到这个具体情况,这就是团队select解决这个问题的方法,我认为这是一个更好的方法。