iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
Mobile Development

swift 30天之旅系列 第 14

第十四天:Swift進階 - 錯誤處理

  • 分享至 

  • xImage
  •  

隨著我們進一步深入Swift,一個不可或缺的主題是如何處理錯誤。在真實世界的應用程式中,很多事情都可能出錯:網絡請求可能失敗、文件可能不存在,或者數據可能是不正確的格式。Swift提供了一個強大、明確的系統來捕獲和處理這些異常情況。

使用try, catch

Swift中的主要錯誤處理機制是trycatch。這與其他許多語言中的異常處理系統非常相似。

考慮以下的函數,該函數可能會拋出一個錯誤:

enum FileError: Error {
    case notFound
}

func readFile(named name: String) throws -> String {
    if name == "missing" {
        throw FileError.notFound
    }
    return "File contents"
}

這個函數使用throws關鍵字表示它可能會拋出一個錯誤。要調用此函數並抓取任何可能的錯誤,你可以使用trycatch

do {
    let contents = try readFile(named: "missing")
    print(contents)
} catch FileError.notFound {
    print("File not found")
} catch {
    print("An unknown error occurred")
}

定義自己的錯誤類型

在Swift中,任何遵循Error協議的類型都可以用作錯誤。通常,我們使用枚舉來表示一組相關的錯誤情況。例如:

enum DatabaseError: Error {
    case entryNotFound
    case invalidData
    case connectionFailed
}

每一個案例都代表一種可能的錯誤狀況。然後,你可以在你的程式碼中使用這些錯誤,並通過throw關鍵字拋出它們。

期望和錯誤

當處理可能會拋出錯誤的函數或方法時,除了trycatch之外,還有其他一些方法可以處理它們。這些方法包括try?try!

使用try?將結果轉換為optional,如果拋出錯誤,則結果為nil

if let contents = try? readFile(named: "missing") {
    print(contents)
} else {
    print("Failed to read the file")
}

try!則強制嘗試該操作並期望它不會失敗。如果確實拋出錯誤,則會觸發運行時錯誤。

let contents = try! readFile(named: "safeFile")
print(contents)

需要小心使用try!,因為如果真的有錯誤,程序會崩潰。

總結

錯誤處理是編寫健壯、可靠應用程序的關鍵部分。Swift提供了一套強大的工具來確定何時和如何處理錯誤。透過使用try, catch, 和自定義的錯誤類型,我們可以清晰地定義和解決應用程序中的異常情況。


上一篇
第十三天:Swift 進階 - 模式匹配
下一篇
第十五天:UIKit入門
系列文
swift 30天之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言