2016-06-28 95 views
20

重構一個同事的代碼,我在swift 3中查找dispatch_barrier_async的等價物。有很多隊列在玩,他的設計是隻阻塞這個隊列,並且只爲了這個單一操作。dispatch_barrier_async相當於Swift 3

// Swift 2.3 
func subscribe(subscriber: DaoDelegate) { 
    dispatch_barrier_async(self.subscribers.q) { // NOTE: barrier, requires exclusive access for write 
    //... 
    } 
} 

// Swift 3 
func subscribe(subscriber: DaoDelegate) { 
    (self.subscribers.q).async { // (Not equivalent, no barrier on the concurrent queue) 
    //... 
    } 
} 

我能留下,在斯威夫特3相同的功能,而無需重構所有隊列類型?

回答

35

async()方法具有flags參數,它接受一個.barrier 選項:

func subscribe(subscriber: DaoDelegate) { 
    (self.subscribers.q).async(flags: .barrier) { 
    //... 
    } 
} 
+0

完美。剛剛從'swift-users'郵件列表中得到了相同的答案。 – SimplGy