请考虑以下枚举和协议的定义
enum Result<T> {
case success(info: T)
case failure(message: String)
}
protocol Response {
associatedtype T
var info: T? { get }
}
我正在尝试使用实现Result
协议的值来初始化Response
。
以下代码无法编译。
extension Result {
init(response: Response) {
// body of the initializer
}
}
谁能指出解决方法?
答案 0 :(得分:4)
类似这样的东西:
extension Result {
init<R: Response>(response: R) where R.T == T {
if let info = response.info {
self = .success(info: info)
} else {
self = .failure(message: "Whoops")
}
}
}
您不能直接使用带有协议的类型,因此应将它们用作通用参数。