我有一个枚举结构,用于传回数据值或错误:
public enum Result<Value> {
case success(Value)
case failure(Error)
}
我还有一个类似于下面的枚举结构,用于从网络层发回错误:
public enum NetworkServiceError: String, Error {
case jsonParsing = "Error parsing the json response from the server"
case invalidUrlRequest = "Error forming the url request"
case dataEncoding = "Error encoding the data"
}
Result类型是通过闭包传回的内容,如下所示:
completion(.failure(NetworkServiceError.invalidUrlRequest))
我正在编写一个测试用例,我需要能够检查该错误是否属于上述枚举类型。为了让您了解我在做什么以及要在哪里检查它,请参见以下示例代码:
networkClient.callAPI() { (result) in
switch result {
case .success( _):
// do something
case .failure(let error):
if error == NetworkServiceError.invalidUrlRequest { // THIS IS WHERE IT FAILS
// do something
} else {
// do something
}
}
}
对于我的情况,我有些困惑;我可能忽略了一些非常简单的内容。预先谢谢你。
答案 0 :(得分:2)
如果查看https://github.com/antitypical/Result的实现,您会发现它们使SQL Error [42601]: ERROR: syntax error at or near "using"
和story: {
name: 'James',
superPrivateData: {
...here goes subcollection
}
}
类型都是通用的。这将使完成关闭可以知道发生了什么类型的错误。然后,开关可以针对特定情况进行匹配。
因此,如果闭包中有Value
,则开关的情况可能变为
Error
如果您不想更改Result<Something, NetworkServiceError>
,则可以使用这种情况来匹配特定类型的错误
case .failure(.jsonParsing):