在 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
}
计算属性通常具有具有恒定时间复杂度的含义。例如,Array.first
和Array.last
是计算属性,而Array.min()
和Array.max()
是函数。
正如你所注意到的,计算属性不能throw
,所以有时迫使你动手,让你不得不选择函数,即使计算属性本来更合适。