如何在 swift 中创建依赖通用协议
How create dependent generic protocol in swift
我正在尝试使用协议为将实现它们的结构提供某些规范,但我需要能够使这些规范成为通用的。
例如:
protocol NodeType {
}
protocol EdgeType {
var fromNode: NodeType
var toNode: NodeType
}
问题是两个节点可能是实现协议 NodeType
的不同结构类型
在一个完美的世界里我需要这个:
protocol EdgeType<T: NodeType> {
var fromNode: T
var toNode: T
}
确保两个节点是相同的class或结构类型
目前在 swift 中有这样的可能吗?
提前致谢
你应该看看 Associated Types。它们是协议的泛型。
protocol NodeType {
}
protocol EdgeType {
associatedtype Node: NodeType
var fromNode: Node { get }
var toNode: Node { get }
}
然后你可以通过指定具体的NodeType
实现来符合EdgeType
:
struct MyNode: NodeType {
}
struct MyEdge: EdgeType {
associatedtype Node = MyNode
var fromNode: MyNode {
return MyNode()
}
var toNode: MyNode {
return MyNode()
}
}
我正在尝试使用协议为将实现它们的结构提供某些规范,但我需要能够使这些规范成为通用的。
例如:
protocol NodeType {
}
protocol EdgeType {
var fromNode: NodeType
var toNode: NodeType
}
问题是两个节点可能是实现协议 NodeType
的不同结构类型在一个完美的世界里我需要这个:
protocol EdgeType<T: NodeType> {
var fromNode: T
var toNode: T
}
确保两个节点是相同的class或结构类型
目前在 swift 中有这样的可能吗? 提前致谢
你应该看看 Associated Types。它们是协议的泛型。
protocol NodeType {
}
protocol EdgeType {
associatedtype Node: NodeType
var fromNode: Node { get }
var toNode: Node { get }
}
然后你可以通过指定具体的NodeType
实现来符合EdgeType
:
struct MyNode: NodeType {
}
struct MyEdge: EdgeType {
associatedtype Node = MyNode
var fromNode: MyNode {
return MyNode()
}
var toNode: MyNode {
return MyNode()
}
}