如何在 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()
    }

}