[英]Should I define computed property of inside of protocol if the extension with implementation follows?
有什么区别:
protocol DashboardTargetInfo: TargetInfo {
var apiVersion: Int { get }
}
extension DashboardTargetInfo {
var apiVersion: Int {
5
}
}
协议定义中没有包含计算属性的那个
protocol DashboardTargetInfo: TargetInfo {}
extension DashboardTargetInfo {
var apiVersion: Int {
5
}
}
如果扩展定义如下,我是否应该包括计算的“apiVersion”属性的定义? 这两个代码片段之间有什么区别吗?
在第一个版本中,apiVersion 是协议的一部分,任何符合标准的类型都必须实现该属性或使用默认属性。 在第二个中,这只是一个计算属性,可用于符合它的类型,而不是协议的一部分。
一个例子:
struct Test1: DashboardTargetInfo { var apiVersion: Int }
struct Test2: DashboardTargetInfo { var apiVersion: Int { 10 } }
let values: [DashboardTargetInfo] = [Test1(apiVersion: 42), Test2()]
print(values.map(\.apiVersion))
使用协议的第一个版本,我们获得了符合类型的值
[42, 10]
但是,如果我们的类型符合第二个示例,则apiVersion
不是协议的一部分,因此仅使用默认计算值
[5, 5]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.