简单 swift 秒表不工作
Simple swift Stopwatch don't work
这是我的代码。
//
// ViewController.swift
// Stopwatch
//
// Created by Orkun Atasoy on 12.09.15.
// Copyright (c) 2015 Orkun Atasoy. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var timerButton: UIButton!
var timer : NSTimer?
var ms = 0
@IBAction func buttonTapped(sender: AnyObject) {
timerButton.setTitle("Stopp", forState:UIControlState.Normal)
self.timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
}
func update() {
self.ms++
timerLabel.text = String(self.ms)enter code here
}
}
问题是当我 运行 构建时,它出现了带有大文本 "Stopwatch" 的介绍屏幕,它就像冻结在那里一样。但它应该带有一个带有文本 "start" 的按钮下方的标签。当我单击按钮时,它应该开始计数并且标签应该更改为 "stopp"。当我再次单击时,它应该会停止计时器。
我不明白问题是什么。我是 Swift 新手。如果你能帮助我,我会很高兴。
感谢您的关注
编辑 >> 标签文本开始于“00:00”。
您在计时器触发时调用的方法不正确。来自文档:
The selector should have the following signature: timerFireMethod: (including a colon to indicate that the method takes an argument). The timer passes itself as the argument, thus the method would adopt the following pattern:
- (void)timerFireMethod:(NSTimer *)timer
所以你的方法应该是:
func update(timer: NSTimer) {
self.ms++
timerLabel.text = String(self.ms)
}
您应该将计时器设置为:
NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: "update:", userInfo: nil, repeats: true)
还有几件事我可以提一下——比如在明确使用变量时不需要使用 self
,以及使用调度计时器而不是 NSTimer,但这至少应该可以解决您眼前的问题.
看起来你在搞乱 IBOutlet
连接,我已经更正了你的一些代码,这里是工作代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var timerButton: UIButton!
var timer : NSTimer?
var ms = 0
override func viewDidLoad() {
timerLabel.text = "00:00"
}
@IBAction func buttonTapped(sender: AnyObject) {
if timerButton.currentTitle == "Stopp" {
timer?.invalidate()
timerButton.setTitle("Start", forState:UIControlState.Normal)
} else {
timerButton.setTitle("Stopp", forState:UIControlState.Normal)
self.timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
}
}
func update() {
self.ms++
timerLabel.text = String(self.ms)
}
}
首先从故事板视图控制器中删除所有插座并以这种方式连接它:
如果你想查看 THIS 示例项目。
这是我的代码。
//
// ViewController.swift
// Stopwatch
//
// Created by Orkun Atasoy on 12.09.15.
// Copyright (c) 2015 Orkun Atasoy. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var timerButton: UIButton!
var timer : NSTimer?
var ms = 0
@IBAction func buttonTapped(sender: AnyObject) {
timerButton.setTitle("Stopp", forState:UIControlState.Normal)
self.timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
}
func update() {
self.ms++
timerLabel.text = String(self.ms)enter code here
}
}
问题是当我 运行 构建时,它出现了带有大文本 "Stopwatch" 的介绍屏幕,它就像冻结在那里一样。但它应该带有一个带有文本 "start" 的按钮下方的标签。当我单击按钮时,它应该开始计数并且标签应该更改为 "stopp"。当我再次单击时,它应该会停止计时器。
我不明白问题是什么。我是 Swift 新手。如果你能帮助我,我会很高兴。
感谢您的关注
编辑 >> 标签文本开始于“00:00”。
您在计时器触发时调用的方法不正确。来自文档:
The selector should have the following signature: timerFireMethod: (including a colon to indicate that the method takes an argument). The timer passes itself as the argument, thus the method would adopt the following pattern: - (void)timerFireMethod:(NSTimer *)timer
所以你的方法应该是:
func update(timer: NSTimer) {
self.ms++
timerLabel.text = String(self.ms)
}
您应该将计时器设置为:
NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: "update:", userInfo: nil, repeats: true)
还有几件事我可以提一下——比如在明确使用变量时不需要使用 self
,以及使用调度计时器而不是 NSTimer,但这至少应该可以解决您眼前的问题.
看起来你在搞乱 IBOutlet
连接,我已经更正了你的一些代码,这里是工作代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var timerButton: UIButton!
var timer : NSTimer?
var ms = 0
override func viewDidLoad() {
timerLabel.text = "00:00"
}
@IBAction func buttonTapped(sender: AnyObject) {
if timerButton.currentTitle == "Stopp" {
timer?.invalidate()
timerButton.setTitle("Start", forState:UIControlState.Normal)
} else {
timerButton.setTitle("Stopp", forState:UIControlState.Normal)
self.timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
}
}
func update() {
self.ms++
timerLabel.text = String(self.ms)
}
}
首先从故事板视图控制器中删除所有插座并以这种方式连接它:
如果你想查看 THIS 示例项目。