我需要安排一个Timer来每秒触发一个函数,但是我发现在xcode 8 beta 3中,scheduledTimer仅适用于iOS 10.在iOS 9或以前版本中使用计时器是否有其他选择?
Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { (timer) in print("Hi!")})
答案 0 :(得分:53)
使用
解决Timer.scheduledTimer(timeInterval: 1,
target: self,
selector: #selector(self.updateTime),
userInfo: nil,
repeats: true)
答案 1 :(得分:15)
使用swift3运行计时器,
x64
不使用时释放计时器。
在运行循环上安排后,计时器将在指定的位置触发 间隔,直到它失效。非重复计时器无效 火灾后立即发生。但是,对于重复计时器,你 必须通过调用invalidate()来自己使计时器对象无效 方法
答案 2 :(得分:5)
以下是可兼容的示例代码:
if #available(iOS 10.0, *) {
Timer.scheduledTimer(withTimeInterval: 15.0, repeats: true){_ in
// Your code is here:
self.myMethod()
}
}
else {
Timer.scheduledTimer(timeInterval: 15.0, target: self, selector: #selector(self.myMethod), userInfo: nil, repeats: true)
}
//您的方法或功能:
// MARK: - Method
@objc func myMethod() {
print("Hi, How are you.")
}
答案 3 :(得分:3)
Swift 3
func runCode(in timeInterval:TimeInterval, _ code:@escaping ()->(Void))
{
DispatchQueue.main.asyncAfter(
deadline: .now() + timeInterval,
execute: code)
}
func runCode(at date:Date, _ code:@escaping ()->(Void))
{
let timeInterval = date.timeIntervalSinceNow
runCode(in: timeInterval, code)
}
func test()
{
runCode(at: Date(timeIntervalSinceNow:2))
{
print("Hello")
}
runCode(in: 3.0)
{
print("World)")
}
}
答案 4 :(得分:3)
更新了swift 3:
如果您想将Timer用于某些延迟或项目代码行中使用的任何其他目的;
//功能定义:
func usedTimerForDelay() {
Timer.scheduledTimer(timeInterval: 0.3,
target: self,
selector: #selector(self.run(_:)),
userInfo: nil,
repeats: false)
}
func run(_ timer: AnyObject) {
print("Do your remaining stuff here...")
}
//函数调用:
self.usedTimerForDelay()
注意: - 您可以根据需要更改时间间隔。
//享受编码..!
答案 5 :(得分:1)
import AccessAlarmIcon from '@material-ui/icons/AccessAlarm';
把它放在主线程中。
答案 6 :(得分:1)
您可以使用以下简单的填充程序为iOS 10之前的版本提供新的基于块的计时器:
class TimerShim {
private var timer: Timer?
private let block: (Timer) -> Void
private init(timeInterval interval: TimeInterval, repeats: Bool, block: @escaping (Timer) -> Void) {
self.block = block
timer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: #selector(timerDidFire), userInfo: nil, repeats: repeats)
}
class func scheduledTimer(withTimeInterval interval: TimeInterval, repeats: Bool, block: @escaping (Timer) -> Void) -> Timer {
return TimerShim(timeInterval: interval, repeats: repeats, block: block).timer!
}
@objc private func timerDidFire() {
block(timer!)
}
}
用法示例:
TimerShim.scheduledTimer(withTimeInterval: 5, repeats: false) { _ in
print("boom!")
}
答案 7 :(得分:-5)
正确的形式是:
Timer.scheduledTimer(withTimeInterval: 2, repeats: false){_ in
"Here your code method"
}