SwiftUI之View Tree 实战2(绘制二叉树)

2020-10-17 15:35:34 蜻蜓队长

本篇为大家带来SwiftUI中Preference的第二个实战教程,最后的实效效果如下图:

其实,用SwiftUI实现上图的二叉树还算简单,节点与节点之间的连线,需要用到Preference的知识。

定义数据结构

二叉树上的节点由两部分组成:

  • 子节点
struct Tree<A>: Identifiable {
    let id = UUID().uuidString
    var value: A
    var children: [Tree<A>] = []

    init(_ value: A, children: [Tree<A>] = []) {
        self.value = value
        self.children = children
    }
}
复制代码

我们用value表示该节点的值,它是一个范型,因此该值可以显示任何类型的数据,用children表示该节点的子节点,之所以让Tree实现Identifiable,目的是后续的代码需要遍历子节点,会用到ForEach。

绘制节点

由于每个节点可能存在n多个子节点,并且子节点在父节点的下方,我们很自然的考虑使用VStack包装一个HStack,示意图如下:

struct DiagramSample<A, V: View>: View {
    let tree: Tree<A>
    let node: (A) -> V

    var body: some View {
        VStack(spacing: 10) {
            node(tree.value)

            HStack(alignment: .bottom, spacing: 10) {
                ForEach(tree.children) { child in
                    DiagramSample(tree: child, node: self.node)
                }
            }
        }
    }
}
复制代码

上边的代码很好理解,采用递归的方法显示各个节点。为了查看效果,我们举个

以上内容来自于网络,如有侵权联系即删除
相关文章

上一篇: iOS libffi详解(1)- 使用方法

下一篇: UICollectionView 自定制布局,例子是钱包界面

在线咨询
客户经理