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
相關文章
- 【VPD】使用Oracle VPD(Virtual Private Database)限制使用者獲取資料的範圍OracleDatabase
- 繫結變數的使用範圍變數
- TypeScript 中限制物件鍵名的取值範圍TypeScript物件
- CSS中background背景色的作用範圍CSS
- MySQL中各種欄位的取值範圍(轉)MySql
- spring中的applicationContext的應用範圍SpringAPPContext
- 短效動態代理ip的使用範圍有哪些
- MongoDB的適用範圍MongoDB
- 公司公司程式碼業務範圍成本控制範圍概念
- maven中scope依賴範圍與classpath的關係Maven
- Javascript中變數範圍和hoist現象JavaScript變數
- Windows Phone開發之輸入範圍InputScope的使用Windows
- 各行業需要改IP工具作用使用範圍!行業
- JavaScript 限定範圍的拖拽效果JavaScript
- MySQL欄位的取值範圍MySql
- 各類IP地址的範圍
- Tomcat的應用範圍Tomcat
- 列舉範圍內的字串字串
- MATLAB中如何產生指定範圍的隨機數Matlab隨機
- JavaScript 拖拽限定範圍JavaScript
- SciPy 應用範圍
- groovy之範圍特性
- oracle hint有效範圍Oracle
- Mysql索引的使用 - 組合索引 + 範圍條件的處理MySql索引
- 基礎 變數的作用範圍變數
- 不可變陣列的範圍求和陣列
- MATLAB中如何生成指定範圍的隨機整數向量Matlab隨機
- mysql中bigint、int、mediumint、smallint 和 tinyint的取值範圍MySql
- java中的 public protected friendly privateJava
- 使用 Carbon 獲取指定時間範圍內的日期陣列陣列
- Spring在單例bean中使用session、request範圍的beanSpring單例BeanSession
- 【EXPDP】使用expdp的QUERY引數限定備份資料的範圍
- 動態範圍控制原理
- 資料型別範圍資料型別
- MySQL 缺失範圍問題MySql
- JavaFX教程-範圍表示式Java
- 保護範圍和物件物件
- 如何在 K8S 叢集範圍使用 imagePullSecret?K8S