Ios 我正在学习Swift,我正在创建一个简单的掷骰子应用程序,我可以';似乎找不到什么';代码有什么问题吗

Ios 我正在学习Swift,我正在创建一个简单的掷骰子应用程序,我可以';似乎找不到什么';代码有什么问题吗,ios,swift,xcode,swift3,Ios,Swift,Xcode,Swift3,该应用程序的要点很简单,你按下小骰子图像,它运行一个函数,返回一个1-6之间的随机数,屏幕上的框反映出它在骰子上的样子,并且当你掷骰子时,彩色框标签会随着数字更新。当我运行应用程序时,一开始一切看起来都很好。我一按下骰子按钮,randomDiceRoll()函数就会运行,但彩色框标签和UIView框(反映骰子上的外观的框)不匹配。再说一次,我只是在学习Swift,所以请让我放松一下。提前感谢所有做出贡献的人!代码如下: import UIKit class ViewController: UI

该应用程序的要点很简单,你按下小骰子图像,它运行一个函数,返回一个1-6之间的随机数,屏幕上的框反映出它在骰子上的样子,并且当你掷骰子时,彩色框标签会随着数字更新。当我运行应用程序时,一开始一切看起来都很好。我一按下骰子按钮,randomDiceRoll()函数就会运行,但彩色框标签和UIView框(反映骰子上的外观的框)不匹配。再说一次,我只是在学习Swift,所以请让我放松一下。提前感谢所有做出贡献的人!代码如下:

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 redBox: 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()

    redBox.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 redBox.isHidden {

        redBox.text = diceScore
        redBox.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 {

        redBox.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.
}
应用程序加载时:

按下一个按钮后:

按下两次按钮后:

以此类推……(应用程序只会重复自身)
总共会有6个彩色标签框。

我认为您的问题是您多次调用
randomDiceRoll()
函数,而不是一次,并使用结果。每次调用
randomDiceRoll()
它都会返回一个新的随机数,您应该调用一次,并将结果保存在内存中以供比较

重构代码,以便将函数的结果分配给一个变量,并使用该变量进行比较,如下所示

@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
    }    
}
我还建议使用switch语句而不是多个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
    }
}

每个
if
语句都在调用
randomDiceRoll()
并生成一个新的随机数。您应该将第一次调用
randomDiceRoll()
的结果分配给一个变量,并进行比较。另外,请查看
switch
语句。您在
按钮中调用了两次
randomDiceRoll()
,请按
在该函数中创建一个局部变量,并将该变量传递给
updateLabelWithRoll
方法非常感谢!这工作做得很好!只要我能接受这个答案,我就会这么做!再次感谢!谢谢你,很高兴能帮忙。祝您项目顺利。另外,感谢您提供有关切换声明的信息。非常有帮助!