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

Swift中如何将答案数组随机分配至按钮且避免重复赋值?

实现按钮随机分配不重复答案

方案一:逐次随机取元素并移除

这种方式适合需要逐步分配的场景,每次取元素后从数组中移除,确保不会重复:

import UIKit

class ViewController: UIViewController {
    
    var buttonArray = [String]()
    
    @IBOutlet weak var button3: UIButton!
    @IBOutlet weak var button2: UIButton!
    @IBOutlet weak var button1: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        buttonArray = ["answer1", "answer2", "answer3"]
    }

    @IBAction func buttonClick(_ sender: UIButton) {
        // 重置答案数组,保证每次点击都有完整的三个选项
        buttonArray = ["answer1", "answer2", "answer3"]
        
        // 给第一个按钮分配随机答案,同时从数组移除该答案
        if let randomIndex = buttonArray.indices.randomElement() {
            let selectedAnswer = buttonArray.remove(at: randomIndex)
            button1.setTitle(selectedAnswer, for: .normal)
        }
        
        // 给第二个按钮分配剩余的随机答案并移除
        if let randomIndex = buttonArray.indices.randomElement() {
            let selectedAnswer = buttonArray.remove(at: randomIndex)
            button2.setTitle(selectedAnswer, for: .normal)
        }
        
        // 最后剩下的答案直接分配给第三个按钮
        if let finalAnswer = buttonArray.first {
            button3.setTitle(finalAnswer, for: .normal)
        }
    }
}

方案二:先打乱数组再批量赋值

如果只需要一次性给所有按钮分配不重复的随机答案,用shuffled()方法会更简洁:

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var button3: UIButton!
    @IBOutlet weak var button2: UIButton!
    @IBOutlet weak var button1: UIButton!

    @IBAction func buttonClick(_ sender: UIButton) {
        // 生成打乱后的答案数组
        let shuffledAnswers = ["answer1", "answer2", "answer3"].shuffled()
        
        // 依次给三个按钮赋值
        button1.setTitle(shuffledAnswers[0], for: .normal)
        button2.setTitle(shuffledAnswers[1], for: .normal)
        button3.setTitle(shuffledAnswers[2], for: .normal)
    }
}

关键注意点

  • 不要直接修改titleLabel?.text,正确的按钮标题设置方式是setTitle(_:for:),它会处理不同状态下的标题显示
  • 方案一中每次点击都重置数组,避免多次点击后数组为空导致崩溃
  • shuffled()方法会返回一个新的打乱数组,不会修改原数组,安全且代码更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:45:34