Swift开发:如何保持两个数组同步并关联随机生成的索引?
解决数组同步随机匹配的问题
嘿,别焦虑!你遇到的问题其实很常见——就是随机索引的作用域问题:你在questions()里生成的随机索引只能在那个函数里用,titles()根本拿不到它。不用折腾闭包,咱们用最简单的方法就能搞定:
方案1:把随机索引变成实例变量
首先,在你的ViewController类里添加一个存储随机索引的实例变量,这样两个函数都能访问到它:
class YourViewController: UIViewController { // 原有的变量 var questionArray = DataModel() var tArray = TitleLabel() // 添加这行:存储当前的随机索引 var currentRandomIndex = 0 // ...其他代码... }
然后修改questions()函数,把生成的随机索引赋值给这个变量:
func questions() { let questions = questionArray.questions // 注意:arc4random返回的是UInt32,要转成Int,用arc4random_uniform更安全(避免越界) currentRandomIndex = Int(arc4random_uniform(UInt32(questions.count))) questionLabel.text = questions[currentRandomIndex] }
最后,titles()函数直接用这个保存好的索引就行:
func titles() { let titlesArray = tArray.titleQuestions titleLabel.text = titlesArray[currentRandomIndex] }
方案2:合并函数(更简洁推荐)
其实没必要分开两个函数,直接在按钮点击事件里一次性处理,这样连实例变量都不用加,代码更紧凑:
@IBAction func questionsButton(_ sender: UIButton) { let questions = questionArray.questions let titles = tArray.titleQuestions // 先做安全检查:确保两个数组数量一致且不为空,避免崩溃 guard questions.count == titles.count, !questions.isEmpty else { questionLabel.text = "暂无问题" titleLabel.text = "暂无标题" return } // 生成随机索引并同时设置两个标签 let randomIndex = Int(arc4random_uniform(UInt32(questions.count))) questionLabel.text = questions[randomIndex] titleLabel.text = titles[randomIndex] }
重要提醒
一定要保证questionArray.questions和tArray.titleQuestions的元素数量完全一致!不然会出现数组越界崩溃的情况,上面的guard语句就是帮你提前处理这种问题的~
内容的提问来源于stack exchange,提问作者Tarsha de Souza
相关产品推荐
相关产品推荐

