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