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

Swift 4使用Struct实现选择题测验时出现重大问题:选项2与4互换

排查Swift选择题测验中第2/4选项互换的问题

嘿,我来帮你揪出这个选项互换的bug!这种固定位置的选项错乱,大概率是代码里某个环节硬编码了索引交换或者索引对应出错了,咱们一步步来排查:

一、先定位问题出在数据层还是UI层

首先加个调试打印,在每次加载新题目后,立刻打印当前题目选项数组的内容:

print("当前选项数组:\(question.Answers)")
  • 如果打印出来的数组里第2个和第4个选项已经互换了,那问题出在数据准备/选项打乱逻辑里;
  • 如果打印的数组是正确的,但UI显示错了,那就是UI绑定/渲染的索引对应错误。

二、常见问题排查方向

1. 选项打乱逻辑的bug

如果你写了自定义的选项打乱代码(不是用系统的shuffled()),很可能不小心硬编码了交换索引1和3(Swift数组是0起始,第2个选项对应索引1,第4个对应索引3)。比如有没有类似这样的错误代码:

// 错误示例:固定交换第2和第4个选项
answers.swapAt(1, 3)

如果是用系统的shuffled(),那要检查有没有在打乱后错误地重置了正确答案索引,不过一般shuffled()不会出现固定位置交换的问题。

2. UI渲染时的索引对应错误

比如你用了四个按钮来展示选项,有没有在给按钮赋值时搞混了索引?比如:

  • 第2个按钮(UI上的第二个选项)不小心取了answers[3];
  • 第4个按钮取了answers[1];
    或者循环渲染时,按钮数组的顺序和选项数组的顺序不匹配。

举个正确的渲染示例(假设你有一个optionButtons数组,顺序和UI上的选项位置一致):

for (index, answer) in question.Answers.enumerated() {
    optionButtons[index].setTitle(answer, for: .normal)
}

3. 结构体初始化时的错误

检查你创建Question实例的代码,有没有在初始化Answers数组时,不小心把第2和第4个选项写反了?不过你说“无论在用户界面还是代码逻辑中”都互换,这个可能性相对低,但也可以快速排查下。

三、额外的Swift命名建议

顺便提一句,Swift的命名规范里,结构体的属性名建议用小写开头(比如question: String、answers: [String]),类型名用大写开头,这样能避免和类型名混淆,让代码更易读:

struct Question { 
    var question: String
    var answers: [String]
    var correctAnswerIndex: Int
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:43:05