2017-09-02 61 views
0

我需要一個功能,它只能被調用一次,你必須要等到下一個可以執行斯威夫特3 - 隔離功能

private func receive(){ 
    var inputBuffer = Array<UInt8>(repeating: 0, count: BUFFER_MAX); 
    let bytesRead = self.inputStream.read(&inputBuffer, maxLength: BUFFER_MAX); 

    if(bytesRead > 0){ 
     let string = convertToString(byteArray: inputBuffer, length: bytesRead); 
     // Call if previous is finished 
     CommandHandler.convert(string); 

    } 
} 

我已經測試過這樣的事情:

var dispQueue = DispatchQueue(label: "commandConvert") 
... 
private func convert(){ 
    dispQueue.sync { 
     ... 

    } 
} 

但這不起作用

+0

也許你可以解釋你試圖解決的更廣泛的問題,我們可以告訴你模式來實現這一點。這聽起來像一個[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),你要求我們幫助你解決你提出的解決方案,而不是根本問題。 – Rob

+0

例如,如果我在0 ... 3,4 ... 7,8 ... 11的包中得到0到100的消息,...我將得到8 ... 11,然後我得到4 .. 0.7。在func轉換。 –

回答

0

我剛剛在這個問題有一天。

您可以使用回調或調度組解決此問題。這裏是調度組解決方案:

class test { 
      let myDispatchGroup = DispatchGroup() 

      func receive() { 
       myDispatchGroup.enter() 
       var inputBuffer = Array<UInt8>(repeating: 0, count: BUFFER_MAX); 
       let bytesRead = self.inputStream.read(&inputBuffer, maxLength: BUFFER_MAX); 
       if(bytesRead > 0){ 
         let string = convertToString(byteArray: inputBuffer, length: bytesRead); 
         myDispatchGroup.leave() 
       } 
       myDispatchGroup.notify(queue: DispatchQueue.main) { 
         // Call if previous is finished 
         CommandHandler.convert(string); 
       } 
      } 
+0

你是對的Rob。糾正。 –