我正在尝试使用Swift创建一个标签,该标签将每秒更新一次。我已经尝试了几个小时(我最近才开始使用Swift),但我还没能完成它。
我已经阅读了一些文档并查看了其他人的答案。到目前为止,我有这个:
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var timeLabel: NSTextField!
var timer = Timer()
let date = Date()
let calendar = Calendar.current
let dateFormatter = DateFormatter()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
dateFormatter.dateStyle = .none
dateFormatter.timeStyle = .medium
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTimeLabel), userInfo: nil, repeats: true);
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
func updateTimeLabel() {
timeLabel.stringValue = dateFormatter.string(from: date)
}
}
所以这样做是因为它更新时间标签 - 但只更新一次 - 这是视图加载的时候。虽然我在Timer
函数中添加了viewDidLoad
,间隔为1秒,但标签仍然是静态的。
有人能指出我在这里做错了吗?
答案 0 :(得分:3)
date
是代码中的常量。 永远不会改变。
您应该在更新发生时重新初始化日期。
func updateTimeLabel() {
timeLabel.stringValue = dateFormatter.string(from: Date())
}
答案 1 :(得分:0)
在您的情况下,updateTimeLabel
在每秒后被调用,但date
不可变变量未被更新,因为它曾使用当前日期设置。此外,如果您想更新date
常数,则需要使用var
代替let
。
每次调用updateTileLabel时都要获取更新的日期时间,您需要执行以下操作
func updateTimeLabel() {
timeLabel.stringValue = dateFormatter.string(from: Date())
}