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

Swift项目编辑或新增txt文件时parts[1]索引越界错误如何解决

错误原因
  • 崩溃的直接诱因是parts数组长度不足2,访问下标1触发数组越界,常见原因有3类:
    1. txt文件存在空行:自行编辑/新建的txt文件通常会在末尾、甚至内容中间残留空行,用\n拆分后得到的空行内容拆分分隔符后,parts数组长度为1甚至为0
    2. 分隔符不匹配:代码中使用的分隔符是" — "(长破折号+前后各1个英文半角空格),编辑txt时如果误输入为短横杠、中文破折号、或者空格数量不对,会导致整行内容无法拆分,parts数组只有1个元素
    3. 行内容格式错误:某一行没有按照「答案 — 提示」的规范书写,缺失分隔符或单侧内容为空
解决方案

1. 先校正txt文件格式

  • 检查所有行的分隔符,确保和代码中定义的" — "完全一致
  • 删除文件开头、末尾、内容中间的所有空行

2. 代码层增加防御逻辑,避免必现崩溃

修改原有代码,增加空行过滤、格式校验逻辑,即使出现格式错误的行也只会跳过不会崩溃,同时可以打印错误行内容方便排查:

DispatchQueue.global().async { [self] in
    // ovo oznacava level1↓ jer je pocetna vrednost poseda level = 1
    if let levelFileURL = Bundle.main.url(forResource: "text1", withExtension: "txt"),
       let levelContents = try? String(contentsOf: levelFileURL) {
        // 拆分后先过滤空行、纯空格行
        var lines = levelContents.components(separatedBy: "\n")
            .filter { !$0.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty }
        lines.shuffle()
        
        for (index, line) in lines.enumerated() {
            let parts = line.components(separatedBy: " — ")
            // 校验行格式是否符合要求,不符合则跳过
            guard parts.count >= 2 else {
                print("格式错误行序号:\(index),行内容:\(line)")
                continue
            }
            let answer = parts[0]
            let clue = parts[1]
            // 此处保留原有后续逻辑
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:45:02