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

标签 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 变量有什么区别,它们是如何工作的,哪个更好?

最佳答案

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

第一个规则是“它有副作用吗?”如果是这样,它应该是一个函数。

第二条规则是“是 O(1) 吗?” (这意味着“它需要一个常量,并且通常被认为是很短的时间来运行。”换句话说,它“便宜吗?”)如果不是,它应该是一个函数。

但第三个更微妙的规则是“它是否被合理地视为实例的“属性”?”在这种情况下,我会争辩说,不。它与实例完全不同。它是在实例上计算的东西,而不是实例的固有部分。用非计算属性替换它是相当荒谬的(你永远不会将“4”存储为“-4”的“abs”字段)。所以我会把它变成一个函数。

请注意,在 Swift 3 中,abs 是类型上的静态函数(例如,它是 Double.abs(4.0) 而不是 (4.0) .abs).这不会使您的问题无效,但考虑到这个特定案例,这就是团队选择解决它的方式,我认为这是更好的方法。

关于ios - Swift.Extensions var 和 func。哪一个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39216087/

相关文章:

ios - 如何将字典作为参数附加到 URL?

ios - 如何确定 PHFetchResult 中的 PHAsset 是否代表已删除的照片?

swift - Swift 中的对象分配和初始化

macos - 如何使用 Mac 开发者 ID 签署 Qt 应用程序?

mysql - mysql.server 启动时出现 PID 错误?

ios - 为什么我的 swift 应用程序会在我离线时崩溃?

ios - 如何在不显示中间 View 的情况下展开多个 View

objective-c - Swift 中的飞利浦 HUE SDK

ios - IQKeyboardManager问题,UIViewController顶部重叠状态栏

c - Errno 35 (EAGAIN) 在 recv 调用时返回