【问题标题】:How create dependent generic protocol in swift如何在 swift 中创建依赖的通用协议
【发布时间】:2015-01-04 17:09:30
【问题描述】:

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

例如:

protocol NodeType {
}

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

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

在一个完美的世界里,我需要这个:

protocol EdgeType<T: NodeType> {
  var fromNode: T
  var toNode: T
}

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

目前在 swift 中是否有可能发生这样的事情? 提前致谢

【问题讨论】:

标签: ios generics swift enums


【解决方案1】:

您应该看看 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()
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多