Swift 語言中的錯誤處理
Swift 的錯誤管理是一種處理程式碼執行過程中發生的錯誤的技術。它允許你建立程式碼,在執行期間平穩地預測和處理錯誤,而不是崩潰。在這篇文章中,你將看到一些處理 Swift 程式碼錯誤的示例。
try、catch 和 throw 關鍵字只是 Swift 提供的錯誤處理工具中的一部分。這些關鍵字協同工作,使程式設計師能夠編寫無錯誤的程式碼。
Swift 中錯誤處理的工作原理的一些要點
如果函式由於任何原因可能丟擲錯誤,則可以在函式宣告中使用 throws 關鍵字進行標記。
呼叫可能丟擲錯誤的函式時,必須使用 try 關鍵字來指示你知道可能丟擲錯誤。
如果丟擲錯誤,可以使用 catch 關鍵字捕獲和處理它。
可以使用 throw 關鍵字丟擲錯誤。
以下是 Swift 中錯誤處理的語法:
enum CustomError: Error {
case errorOne
case errorTwo
}
func doSomething() throws {
// This function can potentially throw two types of errors
if someCondition {
throw CustomError.errorOne
} else if someOtherCondition {
throw CustomError.errorTwo
} else {
// Do something else
}
}
do {
try doSomething()
// No error was thrown, do something else
} catch CustomError.errorOne {
// Handle error one
} catch CustomError.errorTwo {
// Handle error two
} catch {
// Handle all other errors
}
在這個例子中,doSomething() 方法能夠產生 CustomError 列舉中列出的兩個錯誤。try 關鍵字用於表示我們知道呼叫該方法時可能會產生錯誤。
如果丟擲錯誤,可以使用 catch 塊捕獲和處理錯誤。在這個例子中,每個可能的錯誤類別都由一個單獨的 catch 塊表示,而一個通用的 catch 塊用於處理所有其他錯誤。
在 Swift 中丟擲初始化器
值得注意的是,你也可以建立一個丟擲初始化器。這在你想驗證用於初始化特定物件的屬性時特別有用。例如,你可能想在建立 User 物件之前驗證使用者名稱。
示例
import Foundation
struct User {
enum ValidationError: Error {
case emptyName
case shortName(nameLength: Int)
}
let name: String
init(name: String) throws {
guard !name.isEmpty else {
throw ValidationError.emptyName
}
guard name.count > 2 else {
throw ValidationError.shortName(nameLength: name.count)
}
self.name = name
}
}
// Handling Errors in Swift with a do-catch statement
do {
let user = try User(name: "Alex")
print("Created user with name \(user.name)")
} catch {
print("User creation failed with error: \(error)")
}
輸出
Created user with name Alex
Swift try catch:使用 do-catch 語句在 Swift 中處理錯誤
要在 Swift 中處理錯誤,可以使用 do-catch 語句。以下是一個示例:
示例
import Foundation
struct User {
enum ValidationError: Error {
case emptyName
case shortName(nameLength: Int)
}
let name: String
init(name: String) throws {
guard !name.isEmpty else {
throw ValidationError.emptyName
}
guard name.count > 2 else {
throw ValidationError.shortName(nameLength: name.count)
}
self.name = name
}
}
do {
let user = try User(name: "")
print("Created user with name \(user.name)")
} catch {
print("User creation failed with error: \(error)")
}
輸出
User creation failed with error: emptyName
捕獲特定型別的錯誤
由於我們無法指定方法將丟擲的錯誤型別,因此我們必須考慮到可能丟擲不同型別的錯誤。因此,你希望在單獨的 catch 語句中捕獲和處理特定型別的錯誤。
示例
import Foundation
struct User {
enum ValidationError: Error {
case emptyName
case shortName(nameLength: Int)
}
let name: String
init(name: String) throws {
guard !name.isEmpty else {
throw ValidationError.emptyName
}
guard name.count > 2 else {
throw ValidationError.shortName(nameLength: name.count)
}
self.name = name
}
}
do {
let user = try User(name: "A")
print("Created user with name \(user.name)")
} catch User.ValidationError.emptyName {
// Called only when the `User.ValidationError.emptyName` error is thrown
print("User creation failed due to empty name")
} catch User.ValidationError.shortName(let nameLength) where nameLength == 1 {
// Only when the `nameToShort` error is thrown for an input of 1 character
print("User creation failed due to short name")
} catch let error {
print("User creation failed with error: \(error)")
}
輸出
User creation failed due to short name
結論
Swift 具有出色的錯誤管理功能。它處理非正常流程,同時允許你編寫清晰易懂的程式碼。如果需要,我們可以透過能夠捕獲特定錯誤型別或使用 where 關鍵字來處理特定情況。確保你的方法在任何可能的情況下都會丟擲錯誤,以成為一個良好的公民!
你可以建立在 Swift 中管理錯誤的程式碼,這些程式碼是受控且優雅的,確保你的應用程式即使在發生意外事件時也能繼續執行。它允許你為客戶提供更詳細的錯誤通知,這使得他們更容易理解和解決問題。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP