这是我想要实现的目标:
我有一个通用结构struct Future<Element> {}
和另一个通用结构Response<T> {}
.我想写这是在扩展的方法Future
是,只有当有效Element
的Response<T>
.什么T
是无关紧要的.所以这是代码:
extension Future where Element == Response { }
但swift编译器抱怨引用泛型类型'Response'需要<...>中的参数.还有另一种方法可以迅速实现这一目标吗?
Pet*_*r E 10
我知道你问过这已经有一段时间了,但我现在正试图解决类似的问题......如何用这种方式编写扩展,作为具有你想要的约束的通用函数?
struct Future<Element> {
let elem: Element
}
struct Response<T> {
let t: T
}
extension Future {
func newFunc<X>() where Element == Response<X> {
print("My Element is a Response: \(elem.t)")
}
}
Run Code Online (Sandbox Code Playgroud)
一种可能的解决方案是创建一个虚拟协议,该协议Response
符合:
protocol ResponseObject {}
struct Response<T> {}
extension Response: ResponseObject {}
Run Code Online (Sandbox Code Playgroud)
然后您将能够检查扩展中的协议一致性:
extension Future where Element: ResponseObject {
// ...
}
Run Code Online (Sandbox Code Playgroud)