ios - 如何快速创建依赖的通用协议(protocol)

标签 ios generics swift enums

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

例如:

protocol NodeType {
}

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

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

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

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

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

目前在 swift 中是否可能出现这样的情况? 提前致谢

最佳答案

你应该看看 Associated Types 。它们是协议(protocol)的泛型。

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()
    }

}

关于ios - 如何快速创建依赖的通用协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27768096/

相关文章:

java - 泛型工厂的泛型和类型推断

ios - 无法调用 Alamofire.request(...)

c# - 当还有专门的服务类型时,使用 CaSTLe Windsor 的流畅接口(interface)在装饰器链中注册组件?

Java 泛型,将所有整数/vector 添加到列表中

ios - 带上传流的 NSURLSession - 子类化 NSInputStream - com.apple.NSURLConnectionLoader 异常

iphone - UIImagePickerController 横向录制视频

ios - Firebase 查询快照为零?

ios - SwiftUI 如何在 TextView 中添加下划线?

ios - 选项卡栏 Controller 在更新 xcode 后不显示选项卡按钮

ios - 以编程方式添加时,应用程序在 NSLayoutConstraint 上崩溃