Стремительный цикл, который сравнивает время - PullRequest
0 голосов
/ 05 июня 2018

у меня есть расписание и текущее время.Я должен написать цикл, который сравнивает времена.Цикл должен распечатать или отправить уведомление, когда запланированное время соответствует текущему времени.

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

1 Ответ

0 голосов
/ 05 июня 2018

Это не хороший способ работы, но в вашем коде есть небольшие изменения:

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

РЕДАКТИРОВАТЬ

Для этого вам следует использовать таймер.Сначала получите временной интервал, а затем передайте его в таймере как:

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)
...