首页 > 解决方案 > 在 Swift 中,您应该使用内置的 get/set 属性还是使用 getter/setter 方法?

问题描述

在 Swift 中创建类时,最好使用内置的 get/set 关键字来计算属性(参见计算属性https://docs.swift.org/swift-book/LanguageGuide/Properties.html)还是使用 getter /setter 方法?

我认为使用 getter/setter 方法而不是 get/set 关键字在获取/设置某些东西可能会引发错误时会有所帮助(我不相信你能做到get throws { }——我只是尝试过,Xcode 期望 '{' 开始 getter定义):

    func getData() throws -> [[HKSample]] {
        if self.hasData() {
            return self.data
        } else {
            throw BaseError.noData
        }
    }

为什么不应该专门制作 getter 和/或 setter 类方法?为什么不应该专门使用 get/set 关键字,除非您需要抛出错误(我确信方法的用例比抛出错误更多)?我不明白使用 get/set 关键字的意义,尤其是在将封装原则应用于您的代码时。这是我们试图计算矩形棱镜体积的两者差异的另一个例子——是这样的:

    var volume: Double {
        return width * height * depth
    }

比这更有利(或者它只是一种风格的选择?):

    func getVolume() -> Double {
        return self.width * self.height * self.depth
    }

标签: swift

解决方案


计算属性通常带有具有恒定时间复杂度的含义。例如,Array.firstandArray.last是计算属性,而Array.min()andArray.max()是函数。

正如您所注意到的,计算属性不能throw,因此有时会强迫您动手并让您不得不选择函数,即使计算属性在其他情况下更合适。


推荐阅读