Swift 按下按钮时计数器不会减法吗?
每次调用endSetPressed操作时,我都试图将我的setCount设置为-1 我已经将setCount-=1包含到updateTimer函数中,这样当按下endSetPressed时,它应该从setCount中减去-1,然后启动restCount计时器。然而,在实践中,它似乎并没有显示它在应用程序中执行-1操作,它只是保持固定在起始设置计数值 另一个问题是,当用户设置restStepperValueChanged值时,我希望能够看到restRemainingCountdownLabel的值,我认为这是通过“restRemainingCountdownLabel.text=String(restCount)”实现的,但是当im使用“restCount=Int(sender.value)*60”在几分钟内生成一个值时,它在几秒钟而不是几分钟内显示restRemainingCountdownLabel,也感谢您的指导 这是我的密码:Swift 按下按钮时计数器不会减法吗?,swift,timer,nstimer,Swift,Timer,Nstimer,每次调用endSetPressed操作时,我都试图将我的setCount设置为-1 我已经将setCount-=1包含到updateTimer函数中,这样当按下endSetPressed时,它应该从setCount中减去-1,然后启动restCount计时器。然而,在实践中,它似乎并没有显示它在应用程序中执行-1操作,它只是保持固定在起始设置计数值 另一个问题是,当用户设置restStepperValueChanged值时,我希望能够看到restRemainingCountdownLabel的值
@IBOutlet weak var restRemainingCountdownLabel: UILabel!
@IBOutlet weak var setsRemainingCountdownLabel: UILabel!
@IBOutlet weak var numberOfSetsLabel: UILabel!
@IBOutlet weak var numberOfRestLabel: UILabel!
@IBOutlet weak var adjustSetsStepper: UIStepper!
@IBOutlet weak var adjustRestStepper: UIStepper!
var restTimer: Timer?
var restCount = 0
var setCount = 0
@IBAction func endSetPressed(_ sender: Any) {
restTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(RestController.updateTimer), userInfo: nil, repeats: true)
}
@IBAction func setStepperValueChanged(_ sender: UIStepper) {
numberOfSetsLabel.text = Int(sender.value).description
setCount = Int(sender.value)
setsRemainingCountdownLabel.text = String(setCount)
}
@IBAction func restStepperValueChanged(_ sender: UIStepper) {
numberOfRestLabel.text = Int(sender.value).description
restCount = Int(sender.value)*60
restRemainingCountdownLabel.text = String(restCount)
}
@IBAction func resetSetsButton(_ sender: Any) {
//setCount = Int
}
override func viewDidLoad() {
super.viewDidLoad()
}
func updateTimer() {
if (setCount > 0){
setCount -= 1
}
if (restCount > 0){
let minutes = String(restCount / 60)
let seconds = String(restCount % 60)
restRemainingCountdownLabel.text = minutes + ":" + seconds
restCount -= 1
}
}
查看您的
updateTimer()
方法,第一行:
if (setCount > 0)
如果setCount>0
则从setCount
但是……这里您已经声明了值为0的setCount
var setCount = 0
因此,您永远不会出现在if
部分:)
如何调试这个
下次遇到类似问题时,请尝试向代码中添加一些print()
语句
在您的情况下,您可以这样做:
@IBAction func endSetPressed(_ sender: Any) {
print("endSetPressed")
restTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(RestController.updateTimer), userInfo: nil, repeats: true)
}
@IBAction func setStepperValueChanged(_ sender: UIStepper) {
numberOfSetsLabel.text = Int(sender.value).description
setCount = Int(sender.value)
setsRemainingCountdownLabel.text = String(setCount)
}
@IBAction func restStepperValueChanged(_ sender: UIStepper) {
numberOfRestLabel.text = Int(sender.value).description
restCount = Int(sender.value)*60
restRemainingCountdownLabel.text = String(restCount)
}
@IBAction func resetSetsButton(_ sender: Any) {
//setCount = Int
}
override func viewDidLoad() {
super.viewDidLoad()
}
func updateTimer() {
print("updateTimer")
if (setCount > 0){
print("setCount > 0")
setCount -= 1
print("setCount is now \(setCount)")
}
if (restCount > 0){
print("restCount > 0")
let minutes = String(restCount / 60)
let seconds = String(restCount % 60)
restRemainingCountdownLabel.text = minutes + ":" + seconds
restCount -= 1
print("restCount is now \(restCount) - minutes: \(minutes) - seconds: \(seconds)")
}
}
这将为您提供一些关于正在发生的事情以及代码遵循的“路径”的指示
希望这能对你有所帮助。调试你的代码,使用断点和检查值,添加
打印(…)
语句。我只做了一个星期的swift,所以我对调试东西还不够了解,所以为什么我在这里寻求帮助,然后习惯调试,这是我能给你的最有价值的建议,我会给你的。一旦开始添加print
s和断点,这个问题可能很容易解决。谢谢,这很有用,但是如果读数是“updateTimer setCount>0 setCount现在是4”,它怎么可能是4而不是>0?我假设我在前面将setCount设置为=用户定义的数字,因为我首先使用setStepperValueChanged操作将其设置为更高。我成功地使用print语句修复了它,并将set-1向上移动到@IBAction func endSetPressed(u-sender:Any)代码,使其删除1之前,而不是在一个没有意义的计时器的每个滴答声!然后在-1之后将setcount写入标签,我只是盯着它看了太久,我知道那种感觉。有时你会盯着看似简单的东西看太久,以至于失明:)很高兴你把它解决了