如何根据swift中的随机数生成显示特定视图?

如何根据swift中的随机数生成显示特定视图?,swift,match,views,Swift,Match,Views,我正在跟随一个教程,这是关于回购的 我有7个视图,代表模具。还有6个标签,每次我按下dieButtonTapped()按钮时都会显示随机数。当我按下按钮时,第一个标签出现,并生成随机数,这很好,但我无法获得适当的视图显示。所以,如果随机数是5,标签上会显示数字5,7个视图中会显示5个视图,代表模具。 它现在所做的是显示与标签上显示的随机数不匹配的随机视图 请帮助我更正func reseactdie()函数以匹配func updateScore(roll:Int)返回的内容 谢谢大家!! 这是我的

我正在跟随一个教程,这是关于回购的

我有7个视图,代表模具。还有6个标签,每次我按下dieButtonTapped()按钮时都会显示随机数。当我按下按钮时,第一个标签出现,并生成随机数,这很好,但我无法获得适当的视图显示。所以,如果随机数是5,标签上会显示数字5,7个视图中会显示5个视图,代表模具。 它现在所做的是显示与标签上显示的随机数不匹配的随机视图

请帮助我更正
func reseactdie()
函数以匹配
func updateScore(roll:Int)
返回的内容

谢谢大家!! 这是我的密码:

class ViewController: UIViewController {


    @IBOutlet weak var view1: UIView!
    @IBOutlet weak var view2: UIView!
    @IBOutlet weak var view3: UIView!
    @IBOutlet weak var view4: UIView!
    @IBOutlet weak var view5: UIView!
    @IBOutlet weak var view6: UIView!
    @IBOutlet weak var view7: UIView!

    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var label2: UILabel!
    @IBOutlet weak var label3: UILabel!
    @IBOutlet weak var label4: UILabel!
    @IBOutlet weak var label5: UILabel!
    @IBOutlet weak var label6: UILabel!



    override func viewDidLoad() {
        super.viewDidLoad()

        view1.isHidden = true
        view2.isHidden = true
        view3.isHidden = true
        view4.isHidden = true
        view5.isHidden = true
        view6.isHidden = true
        view7.isHidden = true

        label1.isHidden = true
        label2.isHidden = true
        label3.isHidden = true
        label4.isHidden = true
        label5.isHidden = true
        label6.isHidden = true

    }

    @IBAction func dieButtonTapped(_ sender: AnyObject) {

        rearrangeDie()
        updateScore(roll: randomDiceRoll())
    }

    // Returns back a random Int (1, 2, 3, 4, 5, or 6)
    func randomDiceRoll() -> Int {
        return Int(arc4random_uniform(6) + 1)

    }

    func rearrangeDie() {

        if randomDiceRoll() == 1 {
            view7.isHidden = false
        }
        else if randomDiceRoll() == 2 {
            view2.isHidden = false
            view5.isHidden = false
        }
        else if randomDiceRoll() == 3 {
            view2.isHidden = false
            view7.isHidden = false
            view5.isHidden = false
        }
        else if randomDiceRoll() == 4 {
            view1.isHidden = false
            view2.isHidden = false
            view5.isHidden = false
            view6.isHidden = false
        }
        else if randomDiceRoll() == 5 {
            view1.isHidden = false
            view2.isHidden = false
            view5.isHidden = false
            view6.isHidden = false
            view7.isHidden = false
        }
        else if randomDiceRoll() == 6 {
            view1.isHidden = false
            view2.isHidden = false
            view3.isHidden = false
            view4.isHidden = false
            view5.isHidden = false
            view6.isHidden = false
        }


    }


    func updateScore(roll: Int) {

        let diceScore = String(roll)

        if label1.isHidden {
            label1.text = diceScore
            label1.isHidden = false

        }
        else if label2.isHidden {
            label2.text = diceScore
            label2.isHidden = false

        }
        else if label3.isHidden {
            label3.text = diceScore
            label3.isHidden = false

        }
        else if label4.isHidden {
            label4.text = diceScore
            label4.isHidden = false

        }
        else if label5.isHidden {
            label5.text = diceScore
            label5.isHidden = false

        }
        else if label6.isHidden {
            label6.text = diceScore
            label6.isHidden = false

        }
        else {
            viewDidLoad()
        }
    }
}

每次调用
randomDiceRoll()
时,基本上都会生成一个新的随机数。将其存储在变量中,并在整个if语句中访问它

我还强烈建议以编程方式创建布局并进行认真的重构

func rearrangeDie() {
    let randomDiceRoll = randomDiceRoll()

    if randomDiceRoll == 1 {
        view7.isHidden = false
    }
    else if randomDiceRoll == 2 {
        view2.isHidden = false
        view5.isHidden = false
    }
    else if randomDiceRoll == 3 {
        view2.isHidden = false
        view7.isHidden = false
        view5.isHidden = false
    }
    else if randomDiceRoll == 4 {
        view1.isHidden = false
        view2.isHidden = false
        view5.isHidden = false
        view6.isHidden = false
    }
    else if randomDiceRoll == 5 {
        view1.isHidden = false
        view2.isHidden = false
        view5.isHidden = false
        view6.isHidden = false
        view7.isHidden = false
    }
    else if randomDiceRoll == 6 {
        view1.isHidden = false
        view2.isHidden = false
        view3.isHidden = false
        view4.isHidden = false
        view5.isHidden = false
        view6.isHidden = false
    }
}

@4kman正确地指出,每次调用
randomDiceRoll()
都会生成一个新的随机数,从而导致您面临的问题。相反,您需要的是将
researchedie()
updateScore()
方法合并为一个。此外,正如@nanothread59所建议的,您应该使用
IBOutletCollections

您应该像这样声明您的
集合

//Notice that you cannot make them "weak" properties
@IBOutlet var views: Array<UIView>!
@IBOutlet var labels: Array<UILabel>!
func update() {
    //Hide all Views and Labels
    for item in views {
        item.isHidden = true
    }
    for item in labels {
        item.isHidden = true
    }

    //Get Random Value
    let random = randomDiceRoll()

    //UPDATE YOUR VIEWS' AND LABELS' HIDDEN PROPERTY AND VALUES HERE BASED ON THE RANDOM VALUE

    //To access a particular view or label, you'll do something like this
    for item in views {
        if item.tag == {whatever} {
            //DO SOMETHING
        }
    }
    //Repeat the above loop for labels as well
}
override func viewDidLoad() {
    super.viewDidLoad()
    //Hide all Views and Labels
    for item in views {
        item.isHidden = true
    }
    for item in labels {
        item.isHidden = true
    }
}
另外,使用
IBOutletCollections
,您的
viewDidLoad
也会这样更改

//Notice that you cannot make them "weak" properties
@IBOutlet var views: Array<UIView>!
@IBOutlet var labels: Array<UILabel>!
func update() {
    //Hide all Views and Labels
    for item in views {
        item.isHidden = true
    }
    for item in labels {
        item.isHidden = true
    }

    //Get Random Value
    let random = randomDiceRoll()

    //UPDATE YOUR VIEWS' AND LABELS' HIDDEN PROPERTY AND VALUES HERE BASED ON THE RANDOM VALUE

    //To access a particular view or label, you'll do something like this
    for item in views {
        if item.tag == {whatever} {
            //DO SOMETHING
        }
    }
    //Repeat the above loop for labels as well
}
override func viewDidLoad() {
    super.viewDidLoad()
    //Hide all Views and Labels
    for item in views {
        item.isHidden = true
    }
    for item in labels {
        item.isHidden = true
    }
}

请查看IBOutletCollections,它将在这里为您节省大量的设置代码。这并不能解决我的问题:(它仍然与表示此函数的随机数的标签不匹配
func updateScore(roll:Int)