展开nil可选时抛出

问题描述 投票:2回答:2

请考虑以下代码:

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中采用的最干净的方法,还是我可以通过某种方式自动抛出/捕获无值的可选内容?

error-handling try-catch swift2 optional
2个回答
6
投票

[看起来不错,但是用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 letguard let,零合并等。>


0
投票

也许只使用像这样的扩展名🤔

© www.soinside.com 2019 - 2024. All rights reserved.