Swift 比较时间的循环

Swift cycle which compare times

我有预定时间和当前时间。我应该写比较时间的循环。当计划时间等于当前时间时,循环应打印或发送通知。

var schedule : String = "12.22.00"
let formatter = DateFormatter()
formatter.dateFormat = "HH.mm.ss"
let calendar = Calendar.current
let minutesago = calendar.date(byAdding: .minute, value: +2, to: Date())!
let res = formatter.string(from: minutesago)

while true {
    if res == schedule {
        notificate()
        print("isequl")
    }
}

这不是一个好的工作方式,但您的代码只需稍作修改:

var schedule : String = "12.19.00"
let formatter = DateFormatter()
formatter.dateFormat = "HH.mm.ss"
while true {
    let date = Date()
    let res = formatter.string(from: date)
    if res == schedule
    {
        print("isequl")
        break
    }
    sleep(10000)
}

您只会获得一次当前时间,因此 res == schedule 永远不会为真。然后您在字符串值中使用了不同的格式。您的字符串是 hh.mm.ss,格式化程序是 hh.mm

编辑

为此你应该使用计时器。首先获取时间间隔,然后将其传递给 Timer 为:

let date = Date().addingTimeInterval(interval)
let timer = Timer(fireAt: date, interval: 0, target: self, selector: #selector(runCode), userInfo: nil, repeats: false)
RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)