Swift中未解析标识符'questionList'错误的修复方法咨询
解决编译器无法识别
questionsList的问题 咱先拆解下这个错误:编译器找不到questionsList这个名称,本质要么是你写的名字不对,要么是这个变量的位置不对导致当前代码访问不到。结合你的猜测,我给你梳理几个排查和修复的方向:
1. 先检查拼写的一致性!
这是最容易踩的坑——你代码里循环用的是questionsList,但你定义变量的时候是不是写成了questionList(少了个s)?大小写、单复数哪怕差一个字符,编译器都会认成完全不同的东西。先去确认变量的定义和使用的名称完全一致,这个搞定了很多时候问题就解决了。
2. 确认变量的作用域是否正确
如果拼写没问题,那大概率是questionsList的定义位置不对,导致当前代码块拿不到它。举个错误示例:
// 错误:questionsList定义在另一个函数里,当前函数访问不到 func loadQuestions() { var questionsList = [Question]() // 这里加载问题数据... } func calculateScore() { var score = 0 // 编译器找不到这里的questionsList,因为它只在loadQuestions里有效 for question in questionsList { score += question.selectedAnswerIndex! } }
修复方法分两种情况:
- 如果
questionsList是整个页面/类共用的数据,把它定义成类的属性(放在函数外面,类的大括号里):class QuizViewController { // 把questionsList定义在这里,整个类的所有方法都能访问到 var questionsList = [Question]() func loadQuestions() { // 在这里给questionsList赋值... } func calculateScore() { var score = 0 for question in questionsList { score += question.selectedAnswerIndex! } } } - 如果
questionsList是临时生成的,那可以把它作为参数传给计算分数的函数:func calculateScore(with questions: [Question]) { var score = 0 for question in questions { score += question.selectedAnswerIndex! } } // 调用的时候把questionsList传进去就行 calculateScore(with: questionsList)
3. 关于你猜测的var vs 类的问题
其实这个和var没关系——var只是用来声明可变变量,不管它是数组(比如你这里的[Question])还是类的实例,只要作用域正确、拼写对,编译器都能识别。你遇到的问题和变量的类型无关,就是名称或作用域的问题。
另外提个小建议:你代码里用了selectedAnswerIndex!强制解包,如果这个值有可能是nil(比如用户没选答案),会直接导致崩溃,最好换成可选绑定更安全:
for question in questionsList { if let selectedIndex = question.selectedAnswerIndex { score += selectedIndex } }
内容的提问来源于stack exchange,提问作者sheishistoric
相关产品推荐
相关产品推荐

