迅速。如何从扩展中获取泛型类型?

时间:2016-05-13 09:16:26

标签: ios swift generics enums extension-methods

我正在尝试将扩展名写入泛型类型,但由于某些原因而无效。

我的通用枚举:

public enum ResponseResult<Result, Error> {

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

我想为此枚举编写一些扩展名,例如使用枚举泛型参数创建另一个泛型类:

    extension ResponseResult {

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

T - 来自Result类的'ResponseResult'通用参数。 但我不明白如何在扩展中获取泛型参数。

1 个答案:

答案 0 :(得分:1)

要从枚举值中提取参数,您可以使用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用于错误处理的模式非常相似(完全相同)。您可以查看他们的代码和文档以获取更多样本。