我不确定问题的标题是否正确,但假设我们在下面定义了2个通用结构Foo
和Bar
。
// Foo
struct Foo<T> {
}
// Bar
struct Bar<U: Codable> {
}
我想在Foo
上创建一个扩展程序,其中T
被限制为等于Bar
,同时保持Bar.U
符合Codable
的约束
基本上,我该如何做以下的事情?
extension Foo where T == Bar<U: Codable> {
}
上面没有编译。使用符合Codable
(extension Foo where T == Bar<String>
)的具体类型可以起作用,但这会将扩展名限制为只有一种具体类型的Codable
。
我将不胜感激任何帮助/见解。谢谢。
答案 0 :(得分:3)
我不确定您是否正在寻找,但您可以使用相关类型的协议来执行此操作:
struct Foo<T> { }
protocol BarProtocol {
associatedtype U: Codable
}
struct Bar<U: Codable>: BarProtocol {
}
// Now this works
extension Foo where T: BarProtocol {
// T.U can be of any type that implements Codable
}
编辑 - 改为T:BarProtocol,谢谢Marcel!