@@ -81,6 +81,7 @@ public class Task<Progress, Value, Error>
8181 public typealias RejectHandler = ( Error ) -> Void
8282 public typealias Configuration = TaskConfiguration
8383
84+ public typealias ProgressTuple = ( oldProgress: Progress ? , newProgress: Progress )
8485 public typealias BulkProgress = ( completedCount: Int , totalCount: Int )
8586
8687 public typealias PromiseInitClosure = ( fulfill: FulFillHandler , reject: RejectHandler ) -> Void
@@ -199,11 +200,10 @@ public class Task<Progress, Value, Error>
199200 }
200201
201202 // TODO: how to nest these inside StateMachine's initClosure? (using `self` is not permitted)
202- // NOTE: use order > 100 (default) to let `progressClosure(self.progress, newProgress)` be invoked first before updating old `self.progress`
203- self . machine. addEventHandler ( . Progress, order: 110 ) { [ weak self] context in
204- if let progress = context. userInfo as? Progress {
203+ self . machine. addEventHandler ( . Progress, order: 90 ) { [ weak self] context in
204+ if let progressTuple = context. userInfo as? ProgressTuple {
205205 if let self_ = self {
206- self_. progress = progress
206+ self_. progress = progressTuple . newProgress
207207 }
208208 }
209209 }
@@ -233,7 +233,8 @@ public class Task<Progress, Value, Error>
233233 if weakified {
234234 progressHandler = { [ weak self] ( progress: Progress ) in
235235 if let self_ = self {
236- self_. machine <-! ( . Progress, progress)
236+ let oldProgress = self_. progress
237+ self_. machine <-! ( . Progress, ( oldProgress, progress) )
237238 }
238239 }
239240
@@ -251,7 +252,8 @@ public class Task<Progress, Value, Error>
251252 }
252253 else {
253254 progressHandler = { ( progress: Progress ) in
254- self . machine <-! ( . Progress, progress)
255+ let oldProgress = self . progress
256+ self . machine <-! ( . Progress, ( oldProgress, progress) )
255257 return
256258 }
257259
@@ -278,11 +280,11 @@ public class Task<Progress, Value, Error>
278280 self . _cancel ( error: nil )
279281 }
280282
281- public func progress( progressClosure: ( oldProgress : Progress ? , newProgress : Progress ) -> Void ) -> Task
283+ public func progress( progressClosure: ProgressTuple -> Void ) -> Task
282284 {
283285 self . machine. addEventHandler ( . Progress) { [ weak self] context in
284- if let progress = context. userInfo as? Progress {
285- progressClosure ( oldProgress : self ? . progress , newProgress : progress )
286+ if let progressTuple = context. userInfo as? ProgressTuple {
287+ progressClosure ( progressTuple )
286288 }
287289 }
288290
0 commit comments