Swift基础 错误处理

来源:互联网 发布:武田义胜 知乎 编辑:程序博客网 时间:2024/05/20 08:26

Swift的错误处理和Java的相似!!

自定义错误

struct ValueError : Error {    let reason: String}

实现Error协议便可自定义错误。

抛出异常

fun getValue100(error: Bool) throws -> Int {    if error {        throw ValueError(reason: "100")    }    return 100}

其抛出异常也和Java的很像相似。

传递错误

和Java一样,也可以将错误传递出去

fun getValue() throws -> Int {    return try getValue100(false)}

这样的话,就先不会处理,交给外部调用tryError方法时处理,不过还是要“try”关键字。

错误处理 Do-Catch

Swift的错误捕捉和处理

// 如果不想处理ValueErrordo {    try getValue100(true)} catch {    ...}// 如果想判断错误来自于ValueErrordo {    try getValue100(true)} catch is ValueError {    ...}// 如果想要处理ValueErrordo {    try getValue100(true)} catch let error as ValueError {    ...}

将错误转成可选值

如果调用方法(可能会抛出错误)有返回值,而且你可能不太想处理抛出的错误,你可以把这个方法(加关键字)赋给一个变量,那么这个变量就是一个可选类型。

var value = try? getValue100(true)  // value此时的类型是Int?,可能为nilif let v = value {    print("value is \(v)")}   

利用这种方式,我们可以写出比较优雅的代码

func getValue100(error: Bool) throws -> Int {    if error {        throw ValueError(reason: "100")    }    return 100}func getValue200(error: Bool) throws -> Int {    if error {        throw ValueError(reason: "200")    }    return 200}func getValue() -> Int? {    if let value = try? getValue100(error: false) {        return value    }    if let value = try? getValue200(error: false) {        return value    }    return nil}

禁止错误传递

虽然getValue100()方法可能会报错,但是如果传入为false的话,肯定不会报错,我们可以禁止错误传递

let value = try! getValue100(error: false)

到此,应该大概能猜出“!”的意义了吧,“!”一般用于强制性的操作,如可选类型。

原创粉丝点击