2017-09-02 62 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。纠正。 –