Как получить все запланированные или выполняющиеся OperationQueues и отменить их - PullRequest
0 голосов
/ 31 августа 2018

У меня есть сценарий, в котором я хочу отменить все NSOperationQueue, которые запланированы или запущены из нескольких ViewController.

Заранее спасибо

1 Ответ

0 голосов
/ 31 августа 2018

Давайте рассмотрим пример

let queue = OperationQueue()

let op = BlockOperation {
    print("Operation 1 is executing")
}

let op2 = BlockOperation {
    print("Operation 2 is executing")
}

queue.addOperation(op)
queue.addOperation(op2)

Если вы запустите этот код, вы получите результат

Operation 1 is executing
Operation 2 is executing

После добавления этих двух BlockOperation с или Operation с вы можете отменить их с помощью

queue.cancelAllOperations()

Вы можете получить список операций в очереди

print(queue.operations)

и вы получите

[
 <NSBlockOperation 0x600000043e40 isFinished=YES isReady=YES isCancelled=NO isExecuting=NO>, 
 <NSBlockOperation 0x600000045e50 isFinished=YES isReady=YES isCancelled=NO isExecuting=NO>
]

Таким образом, вы можете видеть, что оба завершены и не были отменены, однако, если бы мы отменили их с помощью queue.cancelAllOperations(), мы получили бы

[
 <NSBlockOperation 0x600000043e40 isFinished=YES isReady=YES isCancelled=YES isExecuting=NO>, 
 <NSBlockOperation 0x600000045e50 isFinished=YES isReady=YES isCancelled=YES isExecuting=NO>
]
...