我想做的是有两个泛型类型参数,其中一个是特定类型,另一个是类似的协议:
@propertyWrapper
struct Implementation<T, P> where T : AnyObject, T : P { // Compiler error
var wrappedValue: P { projectedValue }
var projectedValue: T
init(_ instance: T) {
self.projectedValue = instance
}
}
这样,可以隐藏实际类型,并且只暴露协议。
现在这不起作用,因为P
是非类,非协议类型,所以T
不能局限于此。
有没有解决的办法?
我认为您可以为T创建一个要继承的协议,那么您根本就不需要P:
protocol ImplementationProtocol: AnyObject {}
@propertyWrapper
struct Implementation<T: ImplementationProtocol> {
var wrappedValue: ImplementationProtocol { projectedValue }
var projectedValue: T
init(_ instance: T) {
self.projectedValue = instance
}
}
现在,当您在上面的代码中尝试完成时,现在“ T”必须符合“ ImplementationProtocol”,“ wrappedValue”也必须符合“ ImplementationProtocol”。
希望有帮助