[swift 進階]讀書筆記-第八章:錯誤處理 C8P7 錯誤和可選值 Error and Optionals

liaoWorking在掘金發表於2019-03-30

第八章:錯誤處理 Error Handling

8.7 錯誤和可選值 Error and Optionals

本小節圍繞 try? 的用法和相關知識點展開來講,內容不多,比較簡單。

try? 關鍵字的作用: 可以忽略error丟擲的錯誤, 並將返回值轉化為可選值, error時返回nil, 成功時正常返回

示意Demo如下

/// parse方法是一個可以throw error的方法。
if let result = try? parse(text: input)
{ 
    print(result)
}
複製程式碼

使用場景:

你對你的錯誤資訊並不在意的時候可以使用try? (swift 並不建議你去忽略錯誤,不過有些場景去使用try?, 真香~)

使用try? 意味著你能獲得的錯誤資訊少了,我們可以寫一個optional的extension來補充獲得想要的報錯資訊

Demo如下,只做瞭解即可。

extension Optional {
/// Unwraps `self` if it is non-`nil`.
/// Throws the given error if `self` is `nil`. 
    func or(error: Error) throws -> Wrapped {
        switch self {
            case let x?: return x   
            case nil: throw error
        } 
    }
}

do {
    let int = try Int("42").or(error: ReadIntError.couldNotRead)
} catch { 
    print(error)
}
複製程式碼

書中並沒有講try! try? try 的區別,這裡我補充補充:

try!: "我寫的程式碼肯定沒有問題,如果有,你儘管崩潰 " 這個肯定不建議使用啊. 我也一直覺得我寫的程式碼不可能有問題的,可是該崩的時候還是崩。。

try?: 上面已講,略略略。。

try: 常規的異常處理 配合 do catch 一起使用。

文章原始檔地址,大家如果有更好的想法和觀點歡迎交流

相關文章