2016-08-02 101 views
-1

**这是我简单的流程。我仍然需要调用决策者()时,#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 
} 

}

+1

请尝试重写你的问题,因为它不清楚你在问什么 – ddb

+0

也许提供一些你已经尝试过的代码。 – jervine10

+0

你是否试图在延迟后彼此调用不同的函数? (sry,描述对我来说很不清楚) – gujci

回答

0

我可能如果解决方案我明白了。

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结束。虽然我还不确定,但这是你正在寻找的。

+0

让我测试,这是我正在尝试做的坚果壳。你称之为你声明回调的方式:[() - >()] = []? –

+0

[() - >()] = []它声明了一个没有参数和返回值的函数数组。所以你可以添加所有必要的回调。 – gujci

+0

我更新了我的代码: –

相关问题