需要按钮多次重复相同的功能

时间:2018-01-09 21:02:45

标签: ios arrays swift button random

代码的意图是每次按下按钮时产生一个随机练习和数量的代表(从数组中选择)。

但是,按钮仅在第一次按下时才会执行此操作,此后不再执行此操作。

问题:每次推送按钮时,如何确保按钮会生成随机数量的代表和练习(从我的数组中选择)?

import UIKit

class ViewController: UIViewController

{

    var clickCount = 0

    let exercises = ["Push Ups", "Squats", "Burpees", "Sit Ups"]
    let reps = ["5", "6", "7", "8", "9", "10"]

    lazy var randomIndex1 = Int(arc4random() % UInt32(exercises.count))
    lazy var randomIndex2 = Int(arc4random() % UInt32(reps.count))

    @IBOutlet weak var countLabel: UILabel!
    @IBOutlet weak var excerciseType: UILabel!
    @IBOutlet weak var repVolume: UILabel!

    @IBAction func buttonPress(_ sender: UIButton) {

        clickCount+=1

        countLabel.text="You've Tapped \(clickCount) times"

        excerciseType.text="\(exercises[randomIndex1])"

        repVolume.text="\(reps[randomIndex2])"

    }

}

3 个答案:

答案 0 :(得分:2)

您的lazy初始化变量在延迟初始化后不会更改其值。

使用计算变量,它们会在每次访问时返回新值:

var randomIndex1 : Int {
    return Int(arc4random_uniform(UInt32(exercises.count))
}

var randomIndex2 : Int {
    return Int(arc4random_uniform(UInt32(reps.count))
}

代码使用更合适的API arc4random_uniform

答案 1 :(得分:2)

通过将变量放在buttonPress方法

中来生成新值

所以,我会删除这两行

   lazy var randomIndex1 = Int(arc4random() % UInt32(exercises.count))
   lazy var randomIndex2 = Int(arc4random() % UInt32(reps.count))

并在buttonPress中设置这些值

 @IBAction func buttonPress(_ sender: UIButton) {

   clickCount+=1
   let randomIndex1 = Int(arc4random() % UInt32(exercises.count))
   let randomIndex2 = Int(arc4random() % UInt32(reps.count))

   countLabel.text="You've Tapped \(clickCount) times"

   excerciseType.text="\(exercises[randomIndex1])"

   repVolume.text="\(reps[randomIndex2])"

 }

现在每次按下按钮时都应该生成一个新的随机值。正如Leo在评论中所说,由于我们每次都在重新生成它们,因此它们应该是let而不是var

注意

我最初提到了一些关于懒惰变量的东西,因为它们似乎在这里不需要。所以,如果你阅读评论并想知道人们在谈论什么;这就是我最初所说的,这对OP提出的问题并没有真正的帮助,也不清楚;所以我将它移到这里注意:

  

一些事情:

     
      
  • lazy var实际上是一个常量(或者至少在很多地方被视为一个)
  •   

答案 2 :(得分:1)

要使您的随机数发生器可重复使用,您应将其移至新功能中。为了这个答案,我将其称为randomize()。你可以像这样实现:

import UIKit

class ViewController: UIViewController {

  var clickCount = 0

  let exercises = ["Push Ups", "Squats", "Burpees", "Sit Ups"]
  let reps = ["5", "6", "7", "8", "9", "10"]

  lazy var randomIndex1 = Int(arc4random() % UInt32(exercises.count))
  lazy var randomIndex2 = Int(arc4random() % UInt32(reps.count))

  @IBOutlet weak var countLabel: UILabel!
  @IBOutlet weak var excerciseType: UILabel!
  @IBOutlet weak var repVolume: UILabel!

  @IBAction func buttonPress(_ sender: UIButton) {
    clickCount+=1
    countLabel.text="You've Tapped \(clickCount) times"
    self.randomize()
  }

  func randomize() {
    self.randomIndex1 = Int(arc4random() % UInt32(exercises.count))
    self.randomIndex2 = Int(arc4random() % UInt32(reps.count))
    self.excerciseType.text="\(exercises[randomIndex1])"
    self.repVolume.text="\(reps[randomIndex2])"
  }

}