显示当前时间

时间:2019-04-04 21:58:13

标签: ios swift swift4

我想在屏幕上显示当前时间。

我有一段代码可以显示时间(一次) 我有一些要刷新的代码(计时器

我无法将两者结合在一起以在屏幕上更新时间。

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")
}

我的目标是在屏幕上显示一个大钟。

2 个答案:

答案 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()
   }

}