swift 错误处理

2019-05-09  本文已影响0人  皆为序幕_

表示并抛出错误

enum MyError:Error {
    case errorA
    case errorB
    //实现Error协议
    var errorDescription:String{
        if self == .errorA{
            return "errorA"
        }else{
            return "errorB"
        }
    }
}

print(MyError.errorA.errorDescription)  //errorA

处理错误(有4种处理错误的方式)

用 throwing 函数传递错误

enum MyError:Error {
    case errorA
    case errorB
    //实现Error协议
    var errorDescription:String{
        if self == .errorA{
            return "errorA"
        }else{
            return "errorB"
        }
    }
}

func showError(value:Int) throws -> Int {
    if value == 0{
        throw MyError.errorA
    }else if value == 1{
        throw MyError.errorB
    }
    return value
}

// 对于任一可能会抛出错误的函数
// 在调用前面都必须添加try关键字
let ref = try? showError(value: 1)
print(ref as Any)  //nil
let ref = try? showError(value: 2)
print(ref as Any)  //2

用do-catch语句处理错误

使用do- catch语句通过运行代码块来处理错误。如果do的句子中的代码抛出错误,则将其与catch子句进行匹配,以确定它们中的哪一个可以处理错误

do {
    var value = try showError(value: 0)
    print(value)
} catch MyError.errorA {
    print("errorA")  //errorA
} catch {
    print("errorC")
}

将错误作为可选类型处理

使用try?将错误转换为可选值来处理错误
如果在try?表达式时抛出错误,则表达式的值为nil

let value = try? showError(value: 0)
print(value)   //nil

禁用错误传播

使用try!来禁止错误传递,这种方式会把错误放在运行时断言中,如果真的抛出错误,将收到运行时错误

error.png

指定清理操作

var lockState = false
func room() -> Bool{
    lockState = true
    print(lockState)
    defer {
        lockState = false
    }
    return lockState
}

print(lockState)  //false
self.room()  //true
print(lockState)  //false

上一篇下一篇

猜你喜欢

热点阅读