[英]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.