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)
我有预定时间和当前时间。我应该写比较时间的循环。当计划时间等于当前时间时,循环应打印或发送通知。
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)