swift 协议中的泛型
generics in swift protocols
我正在尝试将访客模式从我的(旧)java 代码迁移到 swift。到目前为止,我有一个通用的 FIFO(工作正常)。
protocol FiFo {
associatedtype U
func enqueue(_ : U)
func dequeue() -> U
}
我还想告诉 FIFO 实例只接受与 FIFO 实例使用相同类型的泛型的访问者实例。
protocol Visitor {
associatedtype T
func processValue(_ value : T)
}
protocol FiFo {
associatedtype U
func enqueue(_ : U)
func dequeue() -> U
func visit(_ visitor : Visitor<U>)
}
我面对的是:
Cannot specialize non-generic type 'Visitor'
有什么提示吗?谢谢!
您可以向关联类型添加约束:
protocol Visitor {
associatedtype T
func processValue(_ value : T)
}
protocol FiFo {
associatedtype U
associatedtype V: Visitor where V.T == U
func enqueue(_ : U)
func dequeue() -> U
func visit(_ visitor: V)
}
您可以使 visit
方法通用:接受其关联类型 T
是 fifo 类型 U
:
的任何访问者
protocol FiFo {
associatedtype U
func enqueue(_ : U)
func dequeue() -> U
func visit<V: Visitor>(_ visitor : V) where V.T == U
}
我正在尝试将访客模式从我的(旧)java 代码迁移到 swift。到目前为止,我有一个通用的 FIFO(工作正常)。
protocol FiFo {
associatedtype U
func enqueue(_ : U)
func dequeue() -> U
}
我还想告诉 FIFO 实例只接受与 FIFO 实例使用相同类型的泛型的访问者实例。
protocol Visitor {
associatedtype T
func processValue(_ value : T)
}
protocol FiFo {
associatedtype U
func enqueue(_ : U)
func dequeue() -> U
func visit(_ visitor : Visitor<U>)
}
我面对的是:
Cannot specialize non-generic type 'Visitor'
有什么提示吗?谢谢!
您可以向关联类型添加约束:
protocol Visitor {
associatedtype T
func processValue(_ value : T)
}
protocol FiFo {
associatedtype U
associatedtype V: Visitor where V.T == U
func enqueue(_ : U)
func dequeue() -> U
func visit(_ visitor: V)
}
您可以使 visit
方法通用:接受其关联类型 T
是 fifo 类型 U
:
protocol FiFo {
associatedtype U
func enqueue(_ : U)
func dequeue() -> U
func visit<V: Visitor>(_ visitor : V) where V.T == U
}