2017-06-07 9 views
0

私はタイマーでゲームを再開しようとしていますが、ビューを終了して復帰するたびに、タイマーは重複して速くなります。私はTimer?.isValid関数でこれを対処しようとしましたが、無効なときにタイマーを実行するだけなので重複はしませんが、タイマーがチェックされていないようです。ifステートメントに無効があります。タイマーが動作しているかどうかをチェック

if (myTimer?.isValid){ 
} else{ 
//start timer 
} 

任意の助けをいただければ幸いです、ありがとう:

これは私がこれまで使用してきたif文です。あなたのTimerインスタンスisValid(ないTimerクラス)かどうかを確認する必要があり

+0

あなたは 'viewWillAppear'でタイマーを開始していますか?より多くの情報が役立ちます。 – Mike

+0

タイマーを再割り当てするかnilに設定しても、タイマーは無効になりません。タイマーを(たとえば 'viewDidLoad'のように)一度設定して、必要がなくなったら無効にします。 – FryAnEgg

答えて

0

、タイマーは、それが現在実行中ではない場合にのみ、ストップ機能がnilに確実timer変数を設定し、開始されます。

var timer : Timer? 

func startTimer() 
{ 
    if timer == nil { 
     timer = Timer.scheduledTimer... 
    } 
} 

func stopTimer() 
{ 
    if timer != nil { 
     timer!.invalidate() 
     timer = nil 
    } 
} 
+0

あなたが理解しているかわからない場合は、タイマーが起動しているかどうかをチェックしたい、タイマーを停止/停止してください。 –

+0

質問の中のあなたのコードは次のことを暗示しています:*タイマーが有効でない(起動していない)これはまさに 'startTimer()'がすることです。私の提案したロジックでは、タイマーが 'nil'の場合は実行されていません。 – vadian

+0

申し訳ありません、私は今理解しており、あなたの機能は動作しています! –

1

は、のは言わせて:if myTimer.isValid? {}。私はセルフチェックstartTimer()stopTimer()機能を使用することをお勧めします

関連する問題