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