編程常見錯(cuò)誤:
1、語(yǔ)法(編譯錯(cuò)誤)
2蝶溶、 邏輯錯(cuò)誤
3、 運(yùn)行時(shí)(異常赊时、閃退)
通過error協(xié)議自定義運(yùn)行時(shí)的錯(cuò)誤信息
enum SomeError : Error {
case ary(String)
case outOfBounds(Int,Int)//越界
case outOfMemory//內(nèi)存溢出
}
通過throw拋出自定義error吨铸,需要加throws聲明
func divide(_ v1: Int,_ v2:Int) throws -> Int{
if v2 == 0 {
throw SomeError.ary("0不能作為除數(shù)")
}
return v1/v2
}
do-catch捕捉Error
func test(){
do {
try divide(10, 0)
} catch let SomeError.ary(msg) {
print("參數(shù)錯(cuò)誤",msg)
} catch let SomeError.outOfBounds(size, int){
print("數(shù)組越界\(size)和\(int)")
} catch SomeError.outOfMemory {
print("內(nèi)存溢出")
} catch {
print("其他錯(cuò)誤")
}
}
test()
打印結(jié)果:參數(shù)錯(cuò)誤 0不能作為除數(shù)
不捕捉error,在當(dāng)前函數(shù)增加throws聲明祖秒,Error會(huì)自動(dòng)拋給上層函數(shù)
func test1() throws{
print("1")
print(try divide(20, 0))
print("test1")
}
try? test1()
打印結(jié)果:1
如果使用try! test1()會(huì)拋異常