iOS
대기열의 체인 블록 (MKBlockQueue 포함)
수색…
소개
MKBlockQueue를 사용하면 블록 체인을 만들어 대기열에서 차례대로 실행할 수 있습니다. NSOperation과 비교할 때, MKBlockQueue를 사용하면 블록이 완료되고 대기열을 계속 유지할 때 스스로를 결정할 수 있습니다. 한 블록에서 다음 블록으로 데이터를 전달할 수도 있습니다.
예제 코드
// create the dictionary that will be sent to the blocks
var myDictionary:Dictionary<String, Any> = Dictionary<String, Any>()
myDictionary["InitialKey"] = "InitialValue"
// create block queue
let myBlockQueue:MKBlockQueue = MKBlockQueue()
// block 1
let b1:MKBlockQueueBlockType =
{
(blockQueueObserver:MKBlockQueueObserver, dictionary:inout Dictionary<String, Any>) in
print("Block 1 started with dictionary: \(dictionary)")
dictionary["Block1Key"] = "Block1Value"
// tell this block is now completed
blockQueueObserver.blockCompleted(with:&dictionary)
}
// block 2
let b2:MKBlockQueueBlockType =
{
(blockQueueObserver:MKBlockQueueObserver, dictionary:inout Dictionary<String, Any>) in
var copyOfDictionary:Dictionary<String, Any> = dictionary
// test calling on main thread, async, with delay
DispatchQueue.main.asyncAfter(deadline:(.now() + .seconds(1)), execute:
{
print("Block 2 started with dictionary: \(copyOfDictionary)")
copyOfDictionary["Block2Key"] = "Block2Value"
// tell this block is now completed
blockQueueObserver.blockCompleted(with:©OfDictionary)
})
}
// block 3
let b3:MKBlockQueueBlockType =
{
(blockQueueObserver:MKBlockQueueObserver, dictionary:inout Dictionary<String, Any>) in
var copyOfDictionary:Dictionary<String, Any> = dictionary
// test calling on global background queue, async, with delay
DispatchQueue.global(qos:.background).asyncAfter(deadline:(.now() + .seconds(1)), execute:
{
print("Block 3 started with dictionary: \(copyOfDictionary)")
copyOfDictionary["Block3Key"] = "Block3Value"
// tell this block is now completed
blockQueueObserver.blockCompleted(with:©OfDictionary)
})
}
// add blocks to the queue
myBlockQueue.addBlock(b1)
myBlockQueue.addBlock(b2)
myBlockQueue.addBlock(b3)
// add queue completion block for the queue
myBlockQueue.queueCompletedBlock(
{
(dictionary:Dictionary<String, Any>) in
print("Queue completed with dictionary: \(dictionary)")
})
// run queue
print("Queue starting with dictionary: \(myDictionary)")
myBlockQueue.run(with:&myDictionary)
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow