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
相关产品推荐
相关产品推荐

