Ios 我正在学习Swift,我正在创建一个简单的掷骰子应用程序,我可以';似乎找不到什么';代码有什么问题吗
该应用程序的要点很简单,你按下小骰子图像,它运行一个函数,返回一个1-6之间的随机数,屏幕上的框反映出它在骰子上的样子,并且当你掷骰子时,彩色框标签会随着数字更新。当我运行应用程序时,一开始一切看起来都很好。我一按下骰子按钮,randomDiceRoll()函数就会运行,但彩色框标签和UIView框(反映骰子上的外观的框)不匹配。再说一次,我只是在学习Swift,所以请让我放松一下。提前感谢所有做出贡献的人!代码如下:Ios 我正在学习Swift,我正在创建一个简单的掷骰子应用程序,我可以';似乎找不到什么';代码有什么问题吗,ios,swift,xcode,swift3,Ios,Swift,Xcode,Swift3,该应用程序的要点很简单,你按下小骰子图像,它运行一个函数,返回一个1-6之间的随机数,屏幕上的框反映出它在骰子上的样子,并且当你掷骰子时,彩色框标签会随着数字更新。当我运行应用程序时,一开始一切看起来都很好。我一按下骰子按钮,randomDiceRoll()函数就会运行,但彩色框标签和UIView框(反映骰子上的外观的框)不匹配。再说一次,我只是在学习Swift,所以请让我放松一下。提前感谢所有做出贡献的人!代码如下: import UIKit class ViewController: UI
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
方法非常感谢!这工作做得很好!只要我能接受这个答案,我就会这么做!再次感谢!谢谢你,很高兴能帮忙。祝您项目顺利。另外,感谢您提供有关切换声明的信息。非常有帮助!