如何访问 SwiftyDropbox 错误的关联值?

How can I access the associated values of SwiftyDropbox errors?

我一直在使用 SwiftyDropbox,我遇到了一个奇怪的错误问题。具体来说,我不确定如何处理收到响应后提供的闭包回调中的错误,以便我可以获得它们的关联值。

例如,Dropbox.authorizedClient.filesListFolder 的完成处理程序提供了一个

CallError<(Files.ListFolderError)>? 

一起工作。我将如何检查它是否是

CallError.HTTPError

,以便我可以从中获取 HTTP 错误代码?现在我只是从错误的 .description 中吸取这些信息,但这似乎不是正确的方法。

这是我试过的。我怀疑我没有理解所涉及的泛型。

client.filesListFolder(path: "", recursive: false).response({ (listFolderResult, listFolderError) -> Void in

    switch listFolderError {
    case let .HTTPError(code, message, requestId):
        print("http error")
    default:
        print("not a http error")
    }

Enum case 'HTTPError' not found in type 'CallError?'

这里的问题是我们试图打开一个可选的。这个更简单的例子突出了完全相同的问题:

enum Foo {
    case a
    case b
}

let x: Foo? = nil

switch x {
case .a:
    print("a")
case .b:
    print("b")
}

Enum case 'a' not found in type 'Foo?'

我们可以切换可选值,因为 Optional 本身就是一个 Enum,有两种情况:NoneSome(T)

所以当我们切换一个可选的时,Swift 需要这样的代码:

switch someOptional {
case .Some(someValue):
    print("do some things")
case .None:
    print("someOptional was nil")
}

但这可能不一定特别有用。我们有一个可选的枚举,最终,如果我们在 switch 中处理我们的可选,我们只会有嵌套的 switch 语句。相反,我们应该以正常的 Swift 处理可选值的方式来处理我们的可选值:

if let error = listFolderError {
    switch error {
    case let .HTTPError(code, message, requestID):
        print("http error")
    default:
        print("some other error")
    }
} else {
    print("there was no error")
}