You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS开发:嵌套数组问卷遍历完成后跳转至下一个顶层元素的实现

解决Swift嵌套问卷遍历后跳转至下一个顶层元素的问题

核心思路

将解析后的顶层TreeItem数组作为类级数据源,维护一个当前顶层元素的索引变量。每当完成一个分支的遍历后,自动递增索引并加载下一个顶层元素,实现连续遍历。

具体实现步骤

1. 定义数据源与索引变量

在你的问卷处理类(如ViewController或自定义管理类)中,添加两个关键变量:

// 已解析完成的顶层TreeItem数组
var topLevelTreeItems: [TreeItem] = []
// 当前正在处理的顶层元素索引
var currentTopIndex: Int = 0

2. 实现分支遍历完成后的跳转逻辑

假设你已有traverseTreeItem(_:)方法负责递归遍历单个TreeItem的嵌套分支,在该方法的遍历完成回调中添加跳转逻辑:

// 递归遍历单个TreeItem的嵌套分支,完成后触发回调
func traverseTreeItem(_ item: TreeItem, completion: @escaping () -> Void) {
    // 你的现有遍历逻辑:处理当前item的选项,递归遍历子ChoiceItem
    // ...
    
    // 当当前分支所有嵌套元素都处理完毕时,调用completion
    completion()
}

// 启动下一个顶层元素的遍历入口
func startNextTopLevelItem() {
    guard currentTopIndex < topLevelTreeItems.count else {
        // 所有顶层元素遍历完成,执行结束逻辑
        print("所有问卷内容已处理完毕")
        return
    }
    
    let currentItem = topLevelTreeItems[currentTopIndex]
    traverseTreeItem(currentItem) { [weak self] in
        // 分支遍历完成,索引自增
        self?.currentTopIndex += 1
        // 自动启动下一个顶层元素的遍历
        self?.startNextTopLevelItem()
    }
}

3. 同步更新UI展示

如果UI是基于当前TreeItem渲染的,在启动新元素遍历前更新UI:

func startNextTopLevelItem() {
    guard currentTopIndex < topLevelTreeItems.count else {
        return
    }
    
    let currentItem = topLevelTreeItems[currentTopIndex]
    // 根据当前TreeItem更新问卷UI(标题、选项等)
    updateQuestionnaireUI(with: currentItem)
    
    traverseTreeItem(currentItem) { [weak self] in
        self?.currentTopIndex += 1
        self?.startNextTopLevelItem()
    }
}

// 示例UI更新方法
func updateQuestionnaireUI(with item: TreeItem) {
    questionTitleLabel.text = item.title
    // 刷新选项列表、绑定交互事件等
    // ...
}

4. 支持手动跳转场景

如果需要允许用户手动跳过当前分支,添加手动跳转方法:

func skipToNextTopLevelItem() {
    guard currentTopIndex + 1 < topLevelTreeItems.count else {
        print("已无后续问卷元素")
        return
    }
    currentTopIndex += 1
    startNextTopLevelItem()
}

注意事项

  • 闭包中使用[weak self]避免循环引用,防止内存泄漏。
  • 确保traverseTreeItem的completion回调仅在所有嵌套分支处理完成时触发(比如用户完成最底层选项选择后)。
  • 若涉及异步操作(如加载子选项数据),需保证completion在异步任务结束后执行。

内容的提问来源于stack exchange,提问作者Kshitij876

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:16:00