图遍历

优质
小牛编辑
133浏览
2023-12-01

无论是调试的需要还是修改节点和边,你可能都需要在现有的有向有环图中进行遍历,下面就介绍图遍历的一些方法。

简单访问

节点和边有很多属性和方法是用来遍历的,边的 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. 的实现。