Ios 如何从计时器调用第一个函数后调用下面函数中的函数

Ios 如何从计时器调用第一个函数后调用下面函数中的函数,ios,swift,xcode,Ios,Swift,Xcode,这里是我的流程的简单形式。我仍然需要在#2完成后调用decisionMaker(),在时间结束时运行do,并将度量值的全局变量带到decisionMaker()进行案例测试 TestButtonTAPPED()和调用: 记录计时器() gatherInput() 选择器:levelTimerCallback() 决策者() 我不确定我是否理解您想要实现的目标:)@Asdrubal我希望#2在完成其任务后调用#4time@MSU_Bulldog这就是为什么我要问,我对关闭后的调度不熟悉。我抬头看

这里是我的流程的简单形式。我仍然需要在#2完成后调用decisionMaker(),在时间结束时运行do,并将度量值的全局变量带到decisionMaker()进行案例测试

TestButtonTAPPED()和调用:

  • 记录计时器()
  • gatherInput()

  • 选择器:levelTimerCallback()

  • 决策者()


  • 我不确定我是否理解您想要实现的目标:)@Asdrubal我希望#2在完成其任务后调用#4time@MSU_Bulldog这就是为什么我要问,我对关闭后的调度不熟悉。我抬头看了看,但还是很困惑(哈哈)。我会在我猜…:)之后查找dispatch_@iAction func手动点击(uSender:UIButton){clearGlobalVariablesOnTap()listner()soundRecorder.record()recordTimer()dbListener.gatherInput()}@Asdrubal有一个很好的观点,你的levelTimer正在重复,如果它停止,那么你必须在你的应用程序中的某个地方调用levelTimer.invalidate。如果是这种情况,那么这就是您希望为完成的#2执行操作的时间点。。还有密西西比州的斗牛犬#没问题。快乐地编写课程代码8现在对我大喊大叫-回到转换成swift 3
    // 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)
    }
    
    //3.
    func levelTimerCallback() {
        if soundRecorder.averagePower(forChannel: 0) > -30
        {
            // Do gathering for vaiables
        }
    }
    
    
    // 4.
    func decisionMaker() {
        // case statments here for final measurement
    }
    
    
    
    @IBAction func handTapped(_ sender: UIButton) {
    
        clearGlobalVariablesOnTap()
        listner()
        soundRecorder.record()
        recordTimer()
        dbListener.gatherInput()
    
    }
    
    @IBAction func handTapped(_ sender: UIButton) {
        clearGlobalVariablesOnTap()
        listner()
        soundRecorder.record()
        recordTimer()
    }
    
    func recordTimer() {
    
        //As soon as this method is called this portion will get executed
        dbListener.gatherInput()
    
        /* After 10 seconds, let's stop the recording process */
        let delay = 10.0
        let delayInSeconds = DispatchTime.now() + DispatchTimeInterval.seconds(delay)
    
    
        //After 10 seconds this block will execute
        DispatchQueue.main.after(when: delayInSeconds, execute: {
            self.soundRecorder!.stop()
            self.handBtn.isHidden = false
            self.levelTimer.invalidate = true
            self.decisionMaker()
        })
    
    }
    
    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
        }
    }
    
    
    func decisionMaker() {
        // case statments here for final measurement
    }