Skip to content

Latest commit

 

History

History
53 lines (34 loc) · 1.68 KB

8.7 错误和可选值 Error and Optionals.md

File metadata and controls

53 lines (34 loc) · 1.68 KB

第八章:错误处理 Error Handling

8.7 错误和可选值 Error and Optionals

本小节围绕 try? 的用法和相关知识点展开来讲,内容不多,比较简单。

try? 关键字的作用: 可以忽略error抛出的错误, 并将返回值转化为可选值, error时返回nil, 成功时正常返回

示意Demo如下

// parse方法是一个可以throw error的方法。
if let result = try? parse(text: input)
{ 
    print(result)
}

使用场景:

你对你的错误信息并不在意的时候可以使用try? (swift 并不建议你去忽略错误,不过有些场景去使用try?, 真香~)

使用try? 意味着你能获得的错误信息少了,我们可以写一个optional的extension来补充获得想要的报错信息

Demo如下,只做了解即可。

extension Optional {
/// Unwraps `self` if it is non-`nil`.
/// Throws the given error if `self` is `nil`. 
    func or(error: Error) throws -> Wrapped {
        switch self {
            case let x?: return x   
            case nil: throw error
        } 
    }
}

do {
    let int = try Int("42").or(error: ReadIntError.couldNotRead)
} catch { 
    print(error)
}

书中并没有讲try! try? try 的区别,这里我补充补充:

try!: "我写的代码肯定没有问题,如果有,你尽管崩溃 " 这个肯定不建议使用啊. 我也一直觉得我写的代码不可能有问题的,可是该崩的时候还是崩。。

try?: 上面已讲,略略略。。

try: 常规的异常处理 配合 do catch 一起使用。