图遍历
无论是调试的需要还是修改节点和边,你可能都需要在现有的有向有环图中进行遍历,下面就介绍图遍历的一些方法。
简单访问
节点和边有很多属性和方法是用来遍历的,边的 from 和 to 属性就是例子,而节点更多:
类型 | 名称 | 作用 |
---|---|---|
属性 | upstreamNodes | 当前节点的所有上游节点 |
属性 | downstreamNodes | 当前节点的所有下游节点 |
属性 | upstreamTransforms | 当前节点的所有上游变换 |
属性 | downstreamTransforms | 当前节点的所有下游变换 |
方法 | upstreamTransformsFromNode: | 上游到达另一个节点的所有的变换 |
方法 | downstreamTransformsToNode: | 下游到达另一个节点的所有的变换 |
除此之外,你可以在调试期间通过节点的graph
方法来获得一段长文本,它将所有的与之相关的节点和边做成一个 dot 格式的字符串,你也可以用 graphviz 工具来把它生成为一张图片。
Mac OS 下 需要安装 graphviz 命令行工具
brew install graphviz
生成图片
circo -Tpdf test.dot -o test.pdf && open test.pdf
所有的节点和边都有一个 name 属性,设置 name 属性可以在调试过程中更容易发现问题。
访问器模式
想要更多的访问一个节点而避免递归这样的复杂度,可以使用访问器模式,实现 EZRNodeVisitor 协议写出自己的逻辑即可。详情和例子可以参考 EasyReact/Core/EZRNode+Graph.m. 的实现。