23.Swift學習之訪問權限、異常

模塊和源文件

  • 模塊——是單一的代碼分配單元,一個框架或應用程序會作爲的獨立的單元構建和發佈並且可以使用 Swift 的 import 關鍵字導入到另一個模塊。
  • 源文件是一個模塊中的單個 Swift 源代碼文件。

訪問權限

  • openpublic :允許實體被定義模塊中的任意源文件訪問,同樣可以被另一模塊的源文件通過導入該定義模塊來訪問。在指定框架的公共接口時,通常使用 open 或 public。
  • internal :允許實體被定義模塊中的任意源文件訪問,但不能被該模塊之外的任何源文件訪問。通常在定義應用程序或是框架的內部結構時使用。
  • fileprivate:將實體的使用限制於當前定義源文件中。當一些細節在整個文件中使用時,使用 fileprivate 訪問隱藏特定功能的實現細節。
  • private : 將實體的使用限制於封閉聲明中。當一些細節僅在單獨的聲明中使用時,使用 private 訪問隱藏特定功能的實現細節。

異常

  • 只要我們在編程,就一定要面對錯誤處理的問題。
  • Swift在設計的時候就儘可能讓我們明確感知錯誤,明確處理錯誤
    • 比如:只有使用Optional才能處理空值;
  • 如何描述一個錯誤?
    • 在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")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章