Estoy aprendiendo Swift, y estoy creando una aplicación de rollo de dados simple, no puedo encontrar lo que está mal con el código

La esencia de la aplicación es simple, presiona la pequeña image de los dados, ejecuta una function que devuelve un número aleatorio de 1 a 6, los recuadros de la pantalla reflejan cómo se vería en un dado y las tags de los recuadros de colors son actualizado con el número a medida que tira los dados. Cuando ejecuto la aplicación, todo parece estar bien al principio. Tan pronto como presiono el button de dados, se ejecuta la function randomDiceRoll (), pero las casillas de color y los recuadros UIView (los que reflejan lo que se vería en un dado) no coinciden. Una vez más, estoy aprendiendo Swift así que por favor recórgueme un poco. Gracias de antemano a todos los que contribuyen! Aquí está el código:

import UIKit class ViewController: UIViewController { @IBOutlet var upperLeft: UIView! @IBOutlet var midLeft: UIView! @IBOutlet var lowerLeft: UIView! @IBOutlet var middle: UIView! @IBOutlet var upperRight: UIView! @IBOutlet var midRight: UIView! @IBOutlet var lowerRight: UIView! @IBOutlet var networkingBox: UILabel! @IBOutlet var orangeBox: UILabel! @IBOutlet var yellowBox: UILabel! @IBOutlet var greenBox: UILabel! @IBOutlet var blueBox: UILabel! @IBOutlet var purpleBox: UILabel! override func viewDidLoad() { super.viewDidLoad() networkingBox.isHidden = true orangeBox.isHidden = true yellowBox.isHidden = true greenBox.isHidden = true blueBox.isHidden = true purpleBox.isHidden = true } func randomDiceRoll() -> Int { return Int(arc4random_uniform(6) + 1) } func updateLabelWithRoll(roll: Int) { let diceScore = String(roll) if networkingBox.isHidden { networkingBox.text = diceScore networkingBox.isHidden = false } else if orangeBox.isHidden { orangeBox.text = diceScore orangeBox.isHidden = false } else if yellowBox.isHidden { yellowBox.text = diceScore yellowBox.isHidden = false } else if greenBox.isHidden { greenBox.text = diceScore greenBox.isHidden = false } else if blueBox.isHidden { blueBox.text = diceScore blueBox.isHidden = false } else if purpleBox.isHidden { purpleBox.text = diceScore purpleBox.isHidden = false } else { networkingBox.isHidden = true orangeBox.isHidden = true yellowBox.isHidden = true greenBox.isHidden = true blueBox.isHidden = true purpleBox.isHidden = true } } @IBAction func buttonPress(_ sender: Any) { randomDiceRoll() updateLabelWithRoll(roll: randomDiceRoll()) if randomDiceRoll() == 1 { upperLeft.isHidden = true midLeft.isHidden = true lowerLeft.isHidden = true upperRight.isHidden = true midRight.isHidden = true lowerRight.isHidden = true middle.isHidden = false } if randomDiceRoll() == 2 { upperLeft.isHidden = false midLeft.isHidden = true lowerLeft.isHidden = true upperRight.isHidden = true midRight.isHidden = true lowerRight.isHidden = false middle.isHidden = true } if randomDiceRoll() == 3 { upperLeft.isHidden = false midLeft.isHidden = true lowerLeft.isHidden = true upperRight.isHidden = true midRight.isHidden = true lowerRight.isHidden = false middle.isHidden = false } if randomDiceRoll() == 4 { upperLeft.isHidden = false midLeft.isHidden = true lowerLeft.isHidden = false upperRight.isHidden = false midRight.isHidden = true lowerRight.isHidden = false middle.isHidden = true } if randomDiceRoll() == 5 { upperLeft.isHidden = false midLeft.isHidden = true lowerLeft.isHidden = false upperRight.isHidden = false midRight.isHidden = true lowerRight.isHidden = false middle.isHidden = false } if randomDiceRoll() == 6 { upperLeft.isHidden = false midLeft.isHidden = false lowerLeft.isHidden = false upperRight.isHidden = false midRight.isHidden = false lowerRight.isHidden = false middle.isHidden = true } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } 

Cuando se carga la aplicación:

Pantalla ViewDidLoad, aún no se han realizado acciones.

Después de un button, presione:

Después de presionar un botón

Después de presionar dos botones:

Después de presionar dos botones

Y así sucesivamente … (la aplicación simplemente se repite) Habría 6 cajas de tags de colors en total.

Creo que su problema es que está llamando a la function randomDiceRoll() varias veces en lugar de una vez y usando el resultado. Cada vez que llame a randomDiceRoll() devolverá un NUEVO número aleatorio, debe llamarlo una vez y mantener el resultado en la memory para su comparación

Refactorice su código para que asigne el resultado de la function a una variable y use la variable para comparar, como

 @IBAction func buttonPress(_ sender: Any) { let score = randomDiceRoll() updateLabelWithRoll(roll: score) if score == 1 { upperLeft.isHidden = true midLeft.isHidden = true lowerLeft.isHidden = true upperRight.isHidden = true midRight.isHidden = true lowerRight.isHidden = true middle.isHidden = false } if score == 2 { upperLeft.isHidden = false midLeft.isHidden = true lowerLeft.isHidden = true upperRight.isHidden = true midRight.isHidden = true lowerRight.isHidden = false middle.isHidden = true } if score == 3 { upperLeft.isHidden = false midLeft.isHidden = true lowerLeft.isHidden = true upperRight.isHidden = true midRight.isHidden = true lowerRight.isHidden = false middle.isHidden = false } if score == 4 { upperLeft.isHidden = false midLeft.isHidden = true lowerLeft.isHidden = false upperRight.isHidden = false midRight.isHidden = true lowerRight.isHidden = false middle.isHidden = true } if score == 5 { upperLeft.isHidden = false midLeft.isHidden = true lowerLeft.isHidden = false upperRight.isHidden = false midRight.isHidden = true lowerRight.isHidden = false middle.isHidden = false } if score == 6 { upperLeft.isHidden = false midLeft.isHidden = false lowerLeft.isHidden = false upperRight.isHidden = false midRight.isHidden = false lowerRight.isHidden = false middle.isHidden = true } } 

También recomendaría usar una instrucción de cambio en lugar de varias declaraciones de if.

 @IBAction func buttonPress(_ sender: Any) { let score = randomDiceRoll() updateLabelWithRoll(roll: score) switch score { case 1: upperLeft.isHidden = true midLeft.isHidden = true lowerLeft.isHidden = true upperRight.isHidden = true midRight.isHidden = true lowerRight.isHidden = true middle.isHidden = false case 2: upperLeft.isHidden = false midLeft.isHidden = true lowerLeft.isHidden = true upperRight.isHidden = true midRight.isHidden = true lowerRight.isHidden = false middle.isHidden = true case 3: upperLeft.isHidden = false midLeft.isHidden = true lowerLeft.isHidden = true upperRight.isHidden = true midRight.isHidden = true lowerRight.isHidden = false middle.isHidden = false case 4: upperLeft.isHidden = false midLeft.isHidden = true lowerLeft.isHidden = false upperRight.isHidden = false midRight.isHidden = true lowerRight.isHidden = false middle.isHidden = true case 5: upperLeft.isHidden = false midLeft.isHidden = true lowerLeft.isHidden = false upperRight.isHidden = false midRight.isHidden = true lowerRight.isHidden = false middle.isHidden = false case 6: upperLeft.isHidden = false midLeft.isHidden = false lowerLeft.isHidden = false upperRight.isHidden = false midRight.isHidden = false lowerRight.isHidden = false middle.isHidden = true default: break } }