Xcode中Swift开发如何随机取数组元素并赋值给UILabel显示
实现方案
随机访问数组元素的实现
你可以直接用Swift为数组提供的内置随机取值能力,有两种常用实现方式:
- 方式1:直接调用
randomElement()方法(推荐)
系统会自动生成合法的随机索引取值,自带空安全处理,替换你原来的两行questionLabel.text赋值代码即可:questionLabel.text = myQuestions.randomElement() ?? additionOfNumber - 方式2:手动生成随机索引取值
自己生成对应数组下标的随机数,再通过下标取元素,替换原有赋值代码即可:let randomIndex = Int.random(in: 0..<myQuestions.count) questionLabel.text = myQuestions[randomIndex]
代码优化建议
你当前的代码存在两个潜在问题,建议同步修复:
- 除法运算会触发除零崩溃:
secondNum和thirdNum的取值范围包含0,做除法时会直接崩溃- 题目与正确答案未绑定:取到随机题目后,无法快速获取对应的正确答案做后续答题校验
优化后完整代码
import UIKit class GameScreenViewController: UIViewController { @IBOutlet weak var answerTxtLabel: UITextField! @IBOutlet weak var questionLabel: UILabel! // 存储当前展示题目的正确答案,方便后续判题 var currentCorrectAnswer: Int = 0 func updateQues() { let firstNum = Int.random(in: 0...10) // 先随机生成要使用的运算类型:0=加,1=减,2=乘,3=除 let operationType = Int.random(in: 0...3) var secondNum: Int = 0 var thirdNum: Int = 0 // 除法运算单独处理,第二、三个数不能为0 if operationType == 3 { secondNum = Int.random(in: 1...10) thirdNum = Int.random(in: 1...10) } else { secondNum = Int.random(in: 0...10) thirdNum = Int.random(in: 0...10) } // 根据运算类型生成题目和对应正确答案 var currentQuestion: String = "" switch operationType { case 0: currentQuestion = "\(firstNum) + \(secondNum) + \(thirdNum)" currentCorrectAnswer = firstNum + secondNum + thirdNum case 1: currentQuestion = "\(firstNum) - \(secondNum) - \(thirdNum)" currentCorrectAnswer = firstNum - secondNum - thirdNum case 2: currentQuestion = "\(firstNum) * \(secondNum) * \(thirdNum)" currentCorrectAnswer = firstNum * secondNum * thirdNum case 3: currentQuestion = "\(firstNum) / \(secondNum) / \(thirdNum)" // 注意这里是整数除法,若要小数结果可以把数字转成Double类型计算 currentCorrectAnswer = firstNum / secondNum / thirdNum default: break } // 直接赋值给UILabel即可 questionLabel.text = currentQuestion print(currentCorrectAnswer) } override func viewDidLoad() { super.viewDidLoad() updateQues() } }
内容的提问来源于stack exchange,提问作者AravP
相关产品推荐
相关产品推荐

