我正在尝试使用协议为将要实现它们的结构提供某些规范,但是我需要能够使这些通用。

例如:

protocol NodeType {
}

protocol EdgeType {
  var fromNode: NodeType
  var toNode: NodeType
}

问题在于两个节点可能是实现协议NodeType的不同结构类型

在一个完美的世界中,我需要这样做:
protocol EdgeType<T: NodeType> {
  var fromNode: T
  var toNode: T
}

确保两个节点是相同的类或结构类型

目前有可能迅速发生这种情况吗?
提前致谢

最佳答案

您应该看看 Associated Types 。它们是协议的泛型。

protocol NodeType {

}

protocol EdgeType {

    associatedtype Node: NodeType

    var fromNode: Node { get }
    var toNode: Node { get }

}

然后,您可以通过指定具体的EdgeType实现来遵循NodeType:
struct MyNode: NodeType {

}

struct MyEdge: EdgeType {

    associatedtype Node = MyNode

    var fromNode: MyNode {
        return MyNode()
    }

    var toNode: MyNode {
        return MyNode()
    }

}

10-01 09:28