X Tutup
Skip to content

Commit 5670e8e

Browse files
committed
added: isRunning, counter callback
1 parent bf78897 commit 5670e8e

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

Sources/SwiftyTimer.swift

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,29 @@ extension Timer {
3131

3232
private struct AssociatedKeys {
3333
static var repeatCounterAddress = "repeat_counter_address"
34-
static var numberOfRepeatsAddress = "number_of_repeats_address"
34+
// static var isTimerRunning = "is_timer_running_address"
3535
}
3636

37+
private var isRunning: Bool {
38+
get {
39+
return isValid//objc_getAssociatedObject(self, &AssociatedKeys.isTimerRunning) as? Bool ?? false
40+
}
41+
}
42+
43+
3744
private var repeatCounter: Int {
3845
get {
3946
return objc_getAssociatedObject(self, &AssociatedKeys.repeatCounterAddress) as? Int ?? 0
4047
}
4148
set {
42-
4349
objc_setAssociatedObject(self,
4450
&AssociatedKeys.repeatCounterAddress,
4551
newValue,
46-
.OBJC_ASSOCIATION_RETAIN)
52+
.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
4753
}
4854
}
4955

50-
public class func every(_ interval: TimeInterval, `for` times: Int, _ block: @escaping (Timer) -> Void) -> Timer {
56+
public class func every(_ interval: TimeInterval, `for` times: Int, _ block: @escaping (Timer, Int) -> Void) -> Timer {
5157

5258
let timer = Timer.new(every: interval, for: times, block)
5359
timer.start()
@@ -91,7 +97,7 @@ extension Timer {
9197
/// - Note: The `new` class function is a workaround for a crashing bug when using convenience initializers (rdar://18720947)
9298

9399
public class func new(after interval: TimeInterval, _ block: @escaping () -> Void) -> Timer {
94-
return CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, 0, 0, 0) { _ in
100+
return CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, 0, 0, 0) { timer in
95101
block()
96102
}
97103
}
@@ -134,7 +140,7 @@ extension Timer {
134140
/// Use `NSTimer.every` to create and schedule a timer in one step.
135141
/// - Note: The `new` class function is a workaround for a crashing bug when using convenience initializers (rdar://18720947)
136142

137-
@nonobjc public class func new(every interval: TimeInterval, `for` times: Int, _ block: @escaping (Timer) -> Void) -> Timer {
143+
@nonobjc public class func new(every interval: TimeInterval, `for` times: Int, _ block: @escaping (Timer, Int) -> Void) -> Timer {
138144
var timer: Timer!
139145

140146
timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, interval, 0, 0) { _ in
@@ -148,7 +154,7 @@ extension Timer {
148154
}
149155
}
150156

151-
block(timer)
157+
block(timer, timer.repeatCounter)
152158
}
153159
return timer
154160
}
@@ -175,6 +181,7 @@ extension Timer {
175181
runLoop.add(self, forMode: mode)
176182
}
177183
}
184+
178185
}
179186

180187
// MARK: - Time extensions
@@ -197,4 +204,3 @@ public extension Double {
197204
public var days: TimeInterval { return self * 3600 * 24 }
198205
}
199206

200-

0 commit comments

Comments
 (0)
X Tutup