02-Swift4 中 Private 的 使用範圍
struct Date {
private let secondsSinceReferenceDate: Double
}
extension Date: Equatable {
static func ==(lhs: Date, rhs: Date) -> Bool {
return lhs.secondsSinceReferenceDate == rhs.secondsSinceReferenceDate
}
}
extension Date: Comparable {
static func <(lhs: Date, rhs: Date) -> Bool {
return lhs.secondsSinceReferenceDate < rhs.secondsSinceReferenceDate
}
}
上面的程式碼在Swift3 中無法執行,因為 會報錯:
- 因 secondsSinceReferenceDate 是 Private 屬性,所以不可以在 extension 中訪問。
extension Date: Equatable {
static func ==(lhs: Date, rhs: Date) -> Bool {
// 1. 在 swift3 不能這麼寫,因為會得到一個錯誤
// error: 'secondsSinceReferenceDate' is inaccessible due to private protaction level
// 2.1 secondsSinceReferenceDate 是私有保護,所以無法訪問
return lhs.secondsSinceReferenceDate == rhs.secondsSinceReferenceDate
}
}
如果在 swift3中想要 屬性在 extension 中被訪問到,那屬性需要 改成 fileprivate, 但結果就是 在 整個檔案中都可以被檢索到。
struct Date {
// 2.2 private 是私有宣告,所以在 extension 中沒有辦法獲取到 secondsSinceReferenceDate
// private let secondsSinceReferenceDate: Double
// 2.3 可以使用 Fileprivate 來解決 private 的私有宣告
// 但意味著此定義 在整個檔案中都可以被檢索到,這樣不好。範圍太廣了
fileprivate let secondsSinceReferenceDate: Double
}
在 Swift 4 中,從新擴充套件了 私有定義(Private)的範圍,覆蓋同一原始檔中特定型別的所有擴充套件的宣告,這與使用擴充套件來元件的程式碼的概念更加吻合;
所以以後再同一檔案中,可以不使用 fileprivate 使用 private
SE-0169: Improve Interaction Between Private Declarations and Extensions
相關文章
- ChatGPT的使用範圍到底有多廣?ChatGPT
- TypeScript 中限制物件鍵名的取值範圍TypeScript物件
- 短效動態代理ip的使用範圍有哪些
- 如何在bash中使用{}範圍表示式
- 範圍分割槽
- 軟考——範圍
- 隨機範圍小數和隨機範圍整數隨機
- 各行業需要改IP工具作用使用範圍!行業
- Range範圍選區的理解
- 列舉範圍內的字串字串
- 關於SAP的MRP範圍
- MySQL欄位的取值範圍MySql
- JavaScript 限定範圍的拖拽效果JavaScript
- MATLAB中如何生成指定範圍的隨機整數向量Matlab隨機
- SciPy 應用範圍
- JavaScript 拖拽限定範圍JavaScript
- Cookie 的特徵與範圍用例Cookie特徵
- 基礎 變數的作用範圍變數
- 不可變陣列的範圍求和陣列
- 使用 Carbon 獲取指定時間範圍內的日期陣列陣列
- 如何在 K8S 叢集範圍使用 imagePullSecret?K8S
- python - 生成時間範圍Python
- int/double資料範圍
- 保護範圍和物件物件
- Blender修改視野範圍
- 動態範圍控制原理
- 檢視分割槽範圍
- PFMEA如何定義範圍?
- 資料型別範圍資料型別
- Shell中的${}、##和%%使用範例
- plotly 座標軸範圍截斷rangebreaks使用的一個注意點
- C語言——使用函式輸出指定範圍內的Fibonacci數C語言函式
- 列舉和列舉的取值範圍
- 團體標準的適用範圍
- java位運算子的應用範圍Java
- 生成某個範圍的隨機數隨機
- Angular JS 自定義指令的scope範圍AngularJS
- C++ vector 元素數量變化不能使用範圍 forC++