Swift。如何从扩展中获取泛型?

Swift. How to get generic type from extension?

我正在尝试编写通用类型的扩展,但由于某些原因无法正常工作。

我有通用枚举:

public enum ResponseResult<Result, Error> {

    case Success(result: Result)
    case Failure(error: Error?)
}

我想为这个枚举写一些扩展,例如用枚举泛型参数创建另一个泛型 class:

    extension ResponseResult {

        var response: Response<T> {
            return Response(value: self.value)
        }
    }

T - 是来自 ResponseResult class 的“Result”通用参数。 但我不明白如何在扩展中获取通用参数。

要从枚举值中提取参数,您可以使用 switch-case:

switch response {
case .Success(let result):
    print("Success: \(result)")
case .Failure(let error):
    print("Error: \(error)")
}

如果您在扩展中,只需将 response 替换为 self

在您的具体情况下,也许这就是您正在寻找的:

extension ResponseResult {

    var response: Response<Result>? {
        switch self {
            case .Success(let result):
                return Response(value: result)
            case .Failure: // Ignore error parameter
                return .None
        }
    }
}

该模式与 Alamore 用于错误处理的模式非常相似(完全相同)。您可以查看他们的代码和文档以获取更多示例。