斯威夫特3 - 隔离功能
问题描述:
我需要一个功能,它只能被调用一次,你必须要等到下一个可以执行斯威夫特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 {
...
}
}
但这不起作用
答
我刚刚在这个问题有一天。
您可以使用回调或调度组解决此问题。这里是调度组解决方案:
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。纠正。 –
也许你可以解释你试图解决的更广泛的问题,我们可以告诉你模式来实现这一点。这听起来像一个[XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),你要求我们帮助你解决你提出的解决方案,而不是根本问题。 – Rob
例如,如果我在0 ... 3,4 ... 7,8 ... 11的包中得到0到100的消息,...我将得到8 ... 11,然后我得到4 .. 0.7。在func转换。 –