Skip to content

Instantly share code, notes, and snippets.

import Foundation
class HelloWorldOperation: GroupOperation {
override init() {
super.init()
let op = TextOperation(text: "Hello")
let op2 = TextOperation(text: "World")
op2.addDependency(op)
import Foundation
class OperationObserver: NSObject {
init(operation: AsyncOperation) {
super.init()
operation.addObserver(self, forKeyPath: "finished", options: .new, context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard let key = keyPath else {
let op1 = Operation1()
let op2 = Operation2()
let adapter = BlockOperation() { [unowned op1, unowned op2] in
op2.data = op1.data
}
adapter.addDependency(op1)
op2.addDependency(adapter)
class GroupOperation: AsyncOperation {
let queue = OperationQueue()
var operations: [AsyncOperation] = []
var errors: [Error] = []
override func execute() {
print("group started")
queue.addOperations(operations, waitUntilFinished: true)
print("group done")
}
import Foundation
class UIOperation: AsyncOperation {
let viewController: UIViewcontroller!
override func execute() {
let alert = UIAlertController(title: "My Alert", message: @"This is an alert.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .`default`, handler: { _ in
self.handleInput()
}))
let op1 = Operation()
op1.name = "Operation1"
OperationQueue.main.addOperations([op1], waitUntilFinished:false)
let operations = OperationQueue.main.operations
operations.map { op in
if op.name == "Operation1" {
op.cancel()
}
URLSession.shared.dataTask(with: url!) { data, _, error in
if error != nil {
print(error)
return
}
DispatchQueue.main.async {
imageView.image = UIImage(data: data!)
}
}.resume()
URLSession.shared.dataTask(with: backendurl!) { data, _, error in
if error != nil {
print(error)
return
}
let imageurl = String(data: data!, encoding: String.Encoding.utf8) as String! // For simplicity response is only the URL
URLSession.shared.dataTask(with: URL(string:imageurl!)!) { (data, response, error) in
if error != nil {
print(error)
public class ApiRequestDelegate:NSObject, URLSessionDelegate, URLSessionTaskDelegate,
URLSessionDataDelegate{
// called once as soon as a response returns
public func urlSession(session: URLSession, dataTask: URLSessionDataTask,
didReceiveResponse response: URLResponse,
completionHandler: (URLSession.ResponseDisposition) -> Void) {
// store Response to further process it and call completion Handler to continue
}
class NetworkOperation: Operation {
var targetURL: String?
var resultData: Data?
var _finished = false
override var isFinished: Bool {
get {
return _finished
}
set (newValue) {
willChangeValue(for: \.isFinished)