Alex Liang

在新創公司擔任軟體工程師,記錄我的學習歷程

Swift Error Handling

撰寫程式過程中,免不了需要處理錯誤情形。
如果希望程式碼好維護,會將錯誤偵測和錯誤處理分開來
Swift特別的是enum能和error type結合,產出可讀性高的程式碼

Error Type

1
2
3
4
5
6
enum Error: ErrorType {
case InvalidName
case InsufficientFund
}

throw Error.InvalidName

將enum繼承ErrorType,在抛出例外時有較高的可讀性

Propagating Errors Using Throwing Functions

1
2
3
4
5
6
7
var memberList = ["John", "Joe", "Bob"]

func removeMember(name: String) throws {
guard let index = memberList.indexOf(name) else {
throws Error.InvalidName
}
}

函式加上throws表示可抛出例外,如果名字不在成員清單中則抛出例外

Handling Errors Using Do-Catch

如同其它語言,Swift也提供do-catch的block處理抛出的例外

1
2
3
4
5
6
7
8
9
var memberList = ["John", "Joe", "Bob"]

do {
try removeMember("Alex")
} catch Error.InvalidName {
print("There isn't any member named Alex")
} catch Error.InsufficientFund {
print("Not enough funds")
}

參考來源:
官方文件