我一直在使用
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,有两种情况:None和Some(T).
所以当我们切换一个可选项时,Swift需要这样的代码:
switch someOptional {
case .Some(someValue):
print("do some things")
case .None:
print("someOptional was nil")
}
但这可能不一定特别有用.我们有一个可选的枚举,最后,如果我们在交换机中处理我们的可选项,我们只需要嵌套的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")
}