一.異常的介紹
?.只要我們?cè)诰幊?就一定要面對(duì)錯(cuò)誤處理的問題.
.Swift在設(shè)計(jì)的時(shí)候就盡可能讓我們明確感知錯(cuò)誤,明確處理錯(cuò)誤
.比如:只有使用Optional才能處理空值;
.如何描述一個(gè)錯(cuò)誤?
? ? ? ? ?在Swift里,任何一個(gè)遵從ErrorType protocol的類型,都可以用于描述錯(cuò)誤
? ? ? ? ?ErrorType是一個(gè)空的protocol,它唯一功能就是告訴Swift編譯器,某個(gè)類型用來表示一個(gè)錯(cuò)誤
? ? ? ? ?通常我們用enum來定義各種錯(cuò)誤的可能性
二.異常的示例
假如我們想要讀取一個(gè)文件中的內(nèi)容,按照OC的邏輯我們可以這樣來模擬
當(dāng)我們調(diào)用方法獲取結(jié)果為nil時(shí),你并不能確定到底參數(shù)了什么錯(cuò)誤得到了nil
func ? readFileContent(filePath : String)->String? {
// 1.filePath為
if ?filePath ==""{return nil}
// 2.filepath有值,但是沒有對(duì)應(yīng)的文件
if filePath !="/User/Desktop/123.plist"{return nil}
// 3.取出其中的內(nèi)容
return "123"}
readFileContent("abc")
?- 使用異常對(duì)上述方法進(jìn)行改進(jìn)
// 1.定義異常
enum FileReadError:ErrorType{
case ?FileISNull
case ?FileNotFound}
// 2.改進(jìn)方法,讓方法拋出異常
func readFileContent(filePath : String)throws->String{
// 1.filePath為""
if filePath ==""{
throw FileReadError.FileISNull}
// 2.filepath有值,但是沒有對(duì)應(yīng)的文件
if filePath !="/User/Desktop/123.plist"{
throw FileReadError.FileISNull}
// 3.取出其中的內(nèi)容
return"123"}
三.處理異常有三種方式
3.異常的處理三種方式
3.1.try方式,需要手動(dòng)處理異常
do{
let ?result =try readFileContent("abc")
}catch{
print(error)}
3.2.try?方式,不處理異常,如果出現(xiàn)了異常,則返回一個(gè)nil.沒有異常,則返回對(duì)應(yīng)的值
最終返回結(jié)果為一個(gè)可選類型
let result =try? readFileContent("abc")
3.3.try!方法,告訴系統(tǒng)該方法沒有異常.
注意:如果出現(xiàn)了異常,則程序會(huì)崩潰
try! readFileContent("abc")