2016-08-02 14 views
-1

**ここは私の流れです。私はまだ TestButtonTAPPED(*/最初の関数の実行が終了したときに関数内で複数の関数を呼び出す方法はありますか?

**

ケースのテストのために)#2が終了した後、終了時に行う実行すると、最大である)(意思決定者を呼び出す必要がありますし、(意思決定者に測定のためのグローバル変数を取ります)とのコール:

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

遅れてお互いの後に異なる機能を呼び出そうとしていますか? – 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

私のコードを更新しました: –

関連する問題