swift - Swift - 指定符合泛型类型参数的协议
问题描述
我想要做的是有两个泛型类型参数,其中一个是特定类型,另一个是协议,如下所示:
@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”,就像你在上面的代码中试图完成的那样。
希望能帮助到你
推荐阅读
- c# - 如何通过 ssh 向 Linux Shell 发送命令;将输出存储为变量;但不要将输出打印到控制台
- java - 创建仅具有初始起始偏移的动画的问题
- angularjs - 上传任务快照问题
- ios - 有没有办法在不违反任何许可条款的情况下创建 GPL 许可的 iOS 应用程序并将其分发给客户?
- r - R闪亮的observeEvent在模块中的功能中不起作用
- vba - 带有 MailEnvelope 的 VBA 停止工作
- html - Z-index:孩子放在父母的兄弟姐妹后面
- c - 为什么只有在 main 之外使用时才需要链接数学库?
- c# - 创建自定义模型验证属性
- angular - 静态注入错误(AppModule):离子 3