From 35e482ef4e4a6aa8dea113dc9fd13a04b4b7d71d Mon Sep 17 00:00:00 2001 From: tamamachi Date: Fri, 4 Dec 2015 22:04:05 +0900 Subject: [PATCH 1/2] added transparent .succcess / .failure handler --- SwiftTask/SwiftTask.swift | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/SwiftTask/SwiftTask.swift b/SwiftTask/SwiftTask.swift index 6c33774..d02df5d 100644 --- a/SwiftTask/SwiftTask.swift +++ b/SwiftTask/SwiftTask.swift @@ -198,6 +198,20 @@ public class Task: Cancellable, CustomStringConvertible }) } + /// + /// creates rejected task with ErrorInfo + /// + /// - e.g. Task(errorInfo: someErrorInfo) + /// + internal convenience init(errorInfo: ErrorInfo) + { + self.init(_initClosure: { machine, progress, fulfill, _reject, configure in + _reject(errorInfo) + }) + + self.name = "RejectedTask" + } + /// internal-init for accessing `machine` inside `_initClosure` /// (NOTE: _initClosure has _RejectInfoHandler as argument) internal init(weakified: Bool = false, paused: Bool = false, _initClosure: _InitClosure) @@ -447,6 +461,25 @@ public class Task: Cancellable, CustomStringConvertible } } + /// + /// success (fulfilled) + closure returning nothing + /// used as transpalent (i.e. it doesn't affect passed Task) handler. + /// + /// - e.g. task.success { value -> Void in ... } + /// + public func success(successClosure: Value -> Void) -> Task + { + var dummyCanceller: Canceller? = nil + return self.success(&dummyCanceller, successClosure) + } + + public func success(inout canceller: C?, _ successClosure: Value -> Void) -> Task + { + return self.success(&canceller) { (value: Value) -> Task in + return Task(value: value) + } + } + /// /// success (fulfilled) + closure returning **value** /// @@ -496,6 +529,27 @@ public class Task: Cancellable, CustomStringConvertible }.name("\(self.name)-success") } + /// + /// failure (rejected or cancelled) + closure returning nothing + /// used as transpalent (i.e. it doesn't affect passed Task) handler. + /// + /// - e.g. task.failure { errorInfo -> Void in ... } + /// - e.g. task.failure { error, isCancelled -> Void in ... } + /// + + public func failure(failureClosure: ErrorInfo -> Void) -> Task + { + var dummyCanceller: Canceller? = nil + return self.failure(&dummyCanceller, failureClosure) + } + + public func failure(inout canceller: C?, _ failureClosure: ErrorInfo -> Void) -> Task + { + return self.failure(&canceller) { (errorInfo: ErrorInfo) -> Task in + return Task(errorInfo: errorInfo) + } + } + /// /// failure (rejected or cancelled) + closure returning **value** /// From af9d4b17ba3acdb6de5b383d6727e78095994a20 Mon Sep 17 00:00:00 2001 From: tamamachi Date: Sun, 6 Dec 2015 01:03:41 +0900 Subject: [PATCH 2/2] fixed: make success/failure handlers to be properly invoked --- SwiftTask/SwiftTask.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SwiftTask/SwiftTask.swift b/SwiftTask/SwiftTask.swift index d02df5d..d7e5eb4 100644 --- a/SwiftTask/SwiftTask.swift +++ b/SwiftTask/SwiftTask.swift @@ -463,7 +463,7 @@ public class Task: Cancellable, CustomStringConvertible /// /// success (fulfilled) + closure returning nothing - /// used as transpalent (i.e. it doesn't affect passed Task) handler. + /// used as transparent (i.e. it doesn't affect passed Task) handler. /// /// - e.g. task.success { value -> Void in ... } /// @@ -476,6 +476,7 @@ public class Task: Cancellable, CustomStringConvertible public func success(inout canceller: C?, _ successClosure: Value -> Void) -> Task { return self.success(&canceller) { (value: Value) -> Task in + successClosure(value) return Task(value: value) } } @@ -531,7 +532,7 @@ public class Task: Cancellable, CustomStringConvertible /// /// failure (rejected or cancelled) + closure returning nothing - /// used as transpalent (i.e. it doesn't affect passed Task) handler. + /// used as transparent (i.e. it doesn't affect passed Task) handler. /// /// - e.g. task.failure { errorInfo -> Void in ... } /// - e.g. task.failure { error, isCancelled -> Void in ... } @@ -546,6 +547,7 @@ public class Task: Cancellable, CustomStringConvertible public func failure(inout canceller: C?, _ failureClosure: ErrorInfo -> Void) -> Task { return self.failure(&canceller) { (errorInfo: ErrorInfo) -> Task in + failureClosure(errorInfo) return Task(errorInfo: errorInfo) } }