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 用于错误处理的模式非常相似(完全相同)。您可以查看他们的代码和文档以获取更多示例。
我正在尝试编写通用类型的扩展,但由于某些原因无法正常工作。
我有通用枚举:
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 用于错误处理的模式非常相似(完全相同)。您可以查看他们的代码和文档以获取更多示例。