如何在第一个函数完成运行时调用函数中的多个函数?
**这是我简单的流程。我仍然需要调用决策者()时,#2完成后运行完做的时间,并采取全局变量的测量决策者()的情况测试 **如何在第一个函数完成运行时调用函数中的多个函数?
/* TestButtonTAPPED( ),并调用:
1. recordTimer()
2. gatherInput()
2a. selector: levelTimerCallback()
3. decisionMaker()
*/
// 1.
func recordTimer() {
/* After 10 seconds, let's stop the recording process */
let delayInSeconds = 10.0
let delayInNanoSeconds = DispatchTime.now() + Double(Int64(delayInSeconds * Double(NSEC_PER_SEC)))/Double(NSEC_PER_SEC)
DispatchQueue.main.after(when: delayInNanoSeconds, execute: {
self.soundRecorder!.stop()
self.handBtn.isHidden = false
})
}
// 2.
func gatherInput() {
levelTimer = Timer.scheduledTimer(timeInterval: 0.9, target: self, selector: #selector(DBListener.levelTimerCallback), userInfo:nil, repeats: true)
}
func levelTimerCallback() {
if soundRecorder.averagePower(forChannel: 0) > -30
{
// Do gathering for vaiables
}
}
// 3.
func decisionMaker() {
// case statments here for final measurement
}
}
我可能如果解决方案我明白了。
var callbacks: [() ->()] = []
var levelTimerCallback = {
//some code here...
}
var decisionMaker = {
//other code here...
}
(1...9).forEach() { _ in
callbacks.append(levelTimerCallback)
}
callbacks.append(decisionMaker)
func timerCallback() {
let operation = callbacks.removeFirst()
operation()
}
var levelTimer = Timer.scheduledTimer(timeInterval: 0.9, target: self, selector: #selector(timerCallback), userInfo:nil, repeats: true)
因此,这将调用levelTimer 9次和decisionMaker结束。虽然我还不确定,但这是你正在寻找的。
让我测试,这是我正在尝试做的坚果壳。你称之为你声明回调的方式:[() - >()] = []? –
[() - >()] = []它声明了一个没有参数和返回值的函数数组。所以你可以添加所有必要的回调。 – gujci
我更新了我的代码: –
请尝试重写你的问题,因为它不清楚你在问什么 – ddb
也许提供一些你已经尝试过的代码。 – jervine10
你是否试图在延迟后彼此调用不同的函数? (sry,描述对我来说很不清楚) – gujci