请考虑以下代码:
enum MyErrorType:ErrorType {
case BadTimes
}
var mightHaveAValue: String?
do {
if let value = mightHaveAValue {
// do stuff with value
} else {
throw MyErrorType.BadTimes
}
// do stuff with NSFileManager using mightHaveAValue which might throw
} catch {
// handle error
}
...在其中,我有一个很大的do / try / catch块。在这种情况下,无论mightHaveAValue
为空还是以后NSFileManager
发生错误,错误处理都是相同的。因此,重新使用错误处理代码很有意义。
这是Swift2中采用的最干净的方法,还是我可以通过某种方式自动抛出/捕获无值的可选内容?
[看起来不错,但是用guard let
而不是if let
更好,因为它使您可以在主do
块中使用展开的值,而不必在if let
分支内工作。您还可以使用多个catch
分支来处理不同的错误类型。
do {
guard let value = mightHaveAValue else {
throw MyErrorType.BadTimes
}
// do stuff with value
} catch let error as MyErrorType {
// handle custom error
} catch let error as NSError {
// handle generic NSError
}
没有自动方法来处理可选项的展开,您必须使用许多已知方法之一:if let
,guard let
,零合并等。>
也许只使用像这样的扩展名🤔