我一直在通过遵循以下教程来使日期和时间显示在我的应用程序中:
let now = Date()
let formatter = DateFormatter()
formatter.dateFormat = "MMM d, yyyy"
DateLabel.text = formatter.string(from: now)
let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
let hourString = String(hour)
let minutesString = String(minutes)
TimeLabel.text = hourString + ":" + minutesString
但是当我在模拟器上运行该应用程序时,时间不会随着手机上的时间改变而改变。我如何确保做到这一点?
谢谢!
答案 0 :(得分:1)
主要问题是您只设置了一次文本,并且从未更新过它,我认为可行的方法是,如果您只想显示小时:分钟,则每分钟设置一次文本;如果您想显示小时,则每秒设置一次:分钟:秒。
每分钟设置一次文本需要一个名为Timer的对象,您可以像这样使用它:
//timeInterval: 60 because you want to change every minute or 60 seconds
//selector: #selector(yourFunction)
//repeats: true so it will run until you stop it.
let everyMinuteTimer = Timer.scheduledTimer(timeInterval: 60, target: self,
selector: #selector(updateLabel), userInfo: nil, repeats: true)
func updateLabel() {
let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
let hourString = String(hour)
let minutesString = String(minutes)
TimeLabel.text = hourString + ":" + minutesString
}
答案 1 :(得分:0)
您只是缺少有关应用程序(或与此相关的任何软件)如何工作的简单知识。主线程每30毫秒(最多60毫秒)有一个连续循环,用于检查任何UI更新。由于您仅调用一次代码(可能在视图加载时),因此代码仅更新一次。要连续更新,您需要在某个时间间隔内设置类似计时器的时间(例如分钟或秒,具体取决于时钟的样子),并运行标签更新以传递从重新创建的日期获得的新值,或者自己增加一个数字来摆脱大修。