我正在尝试将扩展名写入泛型类型,但由于某些原因而无效。
我的通用枚举:
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
'通用参数。
但我不明白如何在扩展中获取泛型参数。
答案 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用于错误处理的模式非常相似(完全相同)。您可以查看他们的代码和文档以获取更多样本。