swift - 在 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
}
解决方案
计算属性通常带有具有恒定时间复杂度的含义。例如,Array.first
andArray.last
是计算属性,而Array.min()
andArray.max()
是函数。
正如您所注意到的,计算属性不能throw
,因此有时会强迫您动手并让您不得不选择函数,即使计算属性在其他情况下更合适。
推荐阅读
- javascript - 为什么JS中一个blob的hash和终端使用sha256sum得到的hash不一样?
- node.js - 如何检查一个模块版本与其他模块的兼容性
- java - Spring Boot - 处理 NoHandlerFoundException
- spring - Spring Cloud Stream TestSupportBinder 可以用于测试 Kafka Streams 处理器吗?
- android - Copy Drawable From ImageView
- javascript - 从表行中删除行和重新排序索引
- javascript - JSP Servlet Ajax 调用 (MVC) 遍历 JSON 对象
- node.js - Is there a way to use Aggregation or $sum on dynamic embedded object?
- macos - 证书在钥匙串导入中不可见 - HTTPS 本地服务器 (Chrome/OS)
- jquery - Close a tab in accordion when click on another