我想在屏幕上显示当前时间。
我有一段代码可以显示时间(一次) 我有一些要刷新的代码(计时器
我无法将两者结合在一起以在屏幕上更新时间。
PS:我知道print(“ FIRE”)不会显示时间,但是我尝试的2的每种组合都会导致错误。
func getCurrentDateTime() {
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .long
let str = formatter.string (from: Date ())
TimeNow.text = str
}
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fire), userInfo: nil, repeats: true)
@objc func fire()
{
print("FIRE")
}
我的目标是在屏幕上显示一个大钟。
答案 0 :(得分:1)
我的建议是Timer
的基于块的API –避免使用@objc
属性–并创建一次DateFormatter
。
请遵守变量名以小写字母开头的命名约定。
var timer : Timer!
...
let dateFormatter : DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .long
return formatter
}()
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
DispatchQueue.main.async {
self.timeNow.text = formatter.string(from: Date())
}
}
答案 1 :(得分:0)
如果您已将TimeNow作为IBOutlet UIlabel连接到情节提要视图,则我使用了您的代码,并且该代码有效。 我已经在viewDidLoad中设置了计时器。
您可以尝试下面的代码或主线程风格。实际上,建议从nain线程更新UI。就我而言,两者均有效:
@objc func fire()
{
print("FIRE")
getCurrentDateTime()
}
@objc func fire()
{
print("FIRE")
DispatchQueue.main.async {
self.getCurrentDateTime()
}
}