这是我想要实现的目标:
我有一个通用结构struct Future<Element> {}
和另一个通用结构Response<T> {}
。我想编写一个Future
扩展名的方法,该方法仅在Element
为Response<T>
时才有效。 T
是什么并不重要。所以这是代码:
extension Future where Element == Response { }
但swift编译器抱怨引用泛型类型&#39;响应&#39;需要&lt; ...&gt; 中的参数。还有另一种方法可以在swift中实现这一目标吗?
答案 0 :(得分:10)
我知道自从你提出要求以来已经有一段时间了,但我现在正试图解决类似问题......如何以这种方式编写扩展,作为具有所需约束的通用函数? / p>
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)")
}
}
答案 1 :(得分:2)
一种可能的解决方案是创建Response
符合的虚拟协议:
protocol ResponseObject {}
struct Response<T> {}
extension Response: ResponseObject {}
然后,您就可以检查扩展程序中的协议一致性:
extension Future where Element: ResponseObject {
// ...
}