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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:18:15