Swift-检查枚举类型/值

时间:2018-11-28 22:03:13

标签: swift enums

我有一个枚举结构,用于传回数据值或错误:

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
        }
    }
}

对于我的情况,我有些困惑;我可能忽略了一些非常简单的内容。预先谢谢你。

1 个答案:

答案 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):