SwiftyTask
An extreme queuing system with high performance for managing all task in app with closure
Task
Method Tasking of queued closure on GCD (Grand Central Dispatch).
Requirements
- iOS 10.0+
 - Swift 4.1+
 - Xcode 9.2+
 
Installation
CocoaPods
Task is available through CocoaPods. To install it, simply add the following line to your Podfile:
use_frameworks!
pod "SwiftyTask" 
or
use_frameworks!
pod 'SwiftyTask', git: 'https://github.com/Albinzr/SwiftyTask', :tag => '1.0.1' 
Carthage
To integrate Task into your Xcode project using Carthage, specify it in your Cartfile:
github "CR-Creations/SwiftyTask" 
Example
Basics
SwiftyTask.main {
    // main thread queue
    return "1"
    }.background { result in
         // background qos class thread queue
         print(result) 
         return "2"
    }.userInteractive { result in
         // userInteractive qos class thread queue
         print(result) 
         return "3"
    }.userInitiated { result in
         //userInitiated qos class thread queue
         print(result) 
         return "4"
    }.onDefault { result in
         // default qos class thread queue
         print(result)
         return "5"
    }.run(.Main) { result in
         // called at main thread queue
         print(result) 
         print("Process completion")
} 
Custom queue
let queue = dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)
SwiftyTask.custom(queue) {
    
    //customQueue
    return nil
    }.onDefault { result in
         //default qos class thread queue
         return result
    }.main { result in
         //main thread queue
         return result
    }.custom(customQueue) { result in
         
         // customQueue
         
         return result
    }.run() 
After
SwiftyTask.main {
    
    // main thread queue
    print("start after: \(Date().description)")
    return "1"
    }.after(seconds: 5) { result in
        // 5 seconds after the previous block
        //background qos class thread queue
        print(result)
        return "after 2: \(Date().description)"
    }.userInteractive { result in
        //userInteractive qos class thread queue
        print(result)
        return "after 3: \(Date().description)"
    }.after(Queue.Utility, seconds: 5) { result in
        //5 seconds after the previous block
        // called at utility qos class thread queue
        print(result) 
        return "after 4: \(Date().description)"
    }.run(.Main) { result in
        // last call main thread queue
        print(result) 
        print("after completion: \(Date().description)")
} 
Wait
SwiftyTask.main {
    //  main thread queue
    print("start wait: \(Date().description)")
    return "1"
    }.wait(seconds: 5).background { result in
        // 5 seconds after the previous block
        // background qos class thread queue
        print("wait 2: \(Date().description)")
        return result
    }.wait(seconds: 5).main { result in
        // 5 seconds after the previous block
        // main thread queue
        print("wait 3: \(Date().description)")
        return result
    }.run()
 
License
MIT license. See the LICENSE file for more info.