模塊和源文件
- 模塊——是單一的代碼分配單元,一個框架或應用程序會作爲的獨立的單元構建和發佈並且可以使用 Swift 的 import 關鍵字導入到另一個模塊。
- 源文件是一個模塊中的單個 Swift 源代碼文件。
訪問權限
-
open
和 public
:允許實體被定義模塊中的任意源文件訪問,同樣可以被另一模塊的源文件通過導入該定義模塊來訪問。在指定框架的公共接口時,通常使用 open 或 public。 -
internal
:允許實體被定義模塊中的任意源文件訪問,但不能被該模塊之外的任何源文件訪問。通常在定義應用程序或是框架的內部結構時使用。 -
fileprivate
:將實體的使用限制於當前定義源文件中。當一些細節在整個文件中使用時,使用 fileprivate 訪問隱藏特定功能的實現細節。 -
private
: 將實體的使用限制於封閉聲明中。當一些細節僅在單獨的聲明中使用時,使用 private 訪問隱藏特定功能的實現細節。
異常
- 只要我們在編程,就一定要面對錯誤處理的問題。
- Swift在設計的時候就儘可能讓我們明確感知錯誤,明確處理錯誤
- 如何描述一個錯誤?
- 在Swift裏,任何一個遵從ErrorType protocol的類型,都可以用於描述錯誤。
- ErrorType是一個空的protocol,它唯一的功能,就是告訴Swift編譯器,某個類型用來表示一個錯誤。
- 通常,我們使用一個enum來定義各種錯誤的可能性
異常處理
- 假如我們想要讀取一個文件中的內容,按照OC的邏輯我們可以這樣來模擬
當我們調用方法獲取結果爲nil時,你並不能確定到底參數了什麼錯誤得到了nil
func readFileContent(filePath : String) -> String? {
// 1.filePath爲""
if filePath == "" {
return nil
}
// 2.filepath有值,但是沒有對應的文件
if filePath != "/User/Desktop/123.plist" {
return nil
}
// 3.取出其中的內容
return "123"
}
readFileContent("abc")
// 1.定義異常
enum FileReadError : ErrorType {
case FileISNull
case FileNotFound
}
// 2.改進方法,讓方法拋出異常
func readFileContent(filePath : String) throws -> String {
// 1.filePath爲""
if filePath == "" {
throw FileReadError.FileISNull
}
// 2.filepath有值,但是沒有對應的文件
if filePath != "/User/Desktop/123.plist" {
throw FileReadError.FileISNull
}
// 3.取出其中的內容
return "123"
}
// 3.異常的處理三種方式
// 3.1.try方式,需要手動處理異常
do {
let result = try readFileContent("abc")
} catch {
print(error)
}
// 3.2.try?方式,不處理異常,如果出現了異常,則返回一個nil.沒有異常,則返回對應的值
// 最終返回結果爲一個可選類型
let result = try? readFileContent("abc")
// 3.3.try!方法,告訴系統該方法沒有異常.
// 注意:如果出現了異常,則程序會崩潰
try! readFileContent("abc")