时间:2021-05-20
直接看主要代码
//截止日期let endDate = datePicker.date//开始日期let startDate = Date()//时间间隔let timeInterval:TimeInterval = endDate.timeIntervalSince(startDate)if timer == nil { //剩余时间 var timeout = timeInterval if timeout != 0 { //创建全局队列 let queue = DispatchQueue.global() //在全局队列下创建一个时间源 timer = DispatchSource.makeTimerSource(flags: [], queue: queue) //设定循环的间隔是一秒,并且立即开始 timer?.scheduleRepeating(wallDeadline: DispatchWallTime.now(), interval: .seconds(1)) //时间源出发事件 timer?.setEventHandler(handler: { //必须是当前日期往后的日期,在datePicker上也做了限制 if timeout <= 0 { self.timer?.cancel() self.timer = nil DispatchQueue.main.async(execute: { self.day.text = "00" self.hour.text = "00" self.minute.text = "00" self.second.text = "00" }) } else { //计算剩余时间 let days = Int(timeout) / (3600 * 24) if days == 0 { self.day.text = "" } let hours = (Int(timeout) - Int(days) * 24 * 3600) / 3600 let minutes = (Int(timeout) - Int(days) * 24 * 3600 - Int(hours) * 3600) / 60 let seconds = Int(timeout) - Int(days) * 24 * 3600 - Int(hours) * 3600 - Int(minutes) * 60 //主队列中刷新UI DispatchQueue.main.async(execute: { if days == 0 { self.day.text = "0" } else { self.day.text = "\(days)" } if hours < 10 { self.hour.text = "0" + "\(hours)" } else { self.hour.text = "\(hours)" } if minutes < 10 { self.minute.text = "0" + "\(minutes)" } else { self.minute.text = "\(minutes)" } if seconds < 10 { self.second.text = "0" + "\(seconds)" } else { self.second.text = "\(seconds)" } }) timeout -= 1 } }) //启动时间源 timer?.resume() }}DEMO效果图
DEMO下载地址
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
使用threading写的一个定时器任务demo:importtimeimportsysimportsignalimportdatetimeimportthre
下面一段代码给大家分享swift3.0实现短信验证码倒计时功能,具体实例代码如下所示:?123456789101112131415161718192021222
定时器的三种类型是: 1、接通延时型定时器:接通延时型定时器是各种PLC中最常见最基本的定时器,这种定时器在SIEMENS的PLC中,称为SD型定时器。 2
前言在Swift3.0以前有三种访问控制关键字,分别是private、internal和public。而在swift3以后,又在原来的基础上增加了两种访问控制关
我们对“让Swift3.0在更多的Linux系统上运行”这件事充满了热情,因此我们开始在Ubuntu16.04,即XenialXerus