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

