2016-08-14 20 views
2

ループを停止する方法を理解する必要があります。私はいくつかの種類のループを試しましたが、最終結果は同じです - ループが進行中に停止ボタンを押すことはできません。ここで私はこれまで...ボタンを押してswiftでforループまたはrepeat-whileループを停止する

var stopButtonPressed = false 
var numArray = [0,1,2,3,4,5,6,7,8,9] 
for num in numArray{ 
    print(num) 
    sleep(2) 
    if stopButtonPressed { 
     return 
    } 
} 

が明らかにボタンがtrueにstopButtonPressedセットを押されましたが、ループが反復されながら再び...ボタンを押すことができないものです。だからこれを行うにはより良い方法は何ですか?

EDIT [OK]を

@dasblinkinlight

ので、私はあなたが言っているのロジックに従うことができますが、実装はまだ混乱しています。あなたの例では、セレクタのために、 "MyClass.doOneStepOfLoop"を置くと完璧な意味があります。タイマーだけが、関数をパラメーターとして受け入れたくない。だから、それが機能を受け入れないなら、どうすればいいの?

問題を単純化するために、2秒おきに印刷(「1」)する方法はありますか?あなたの例オフに基づいて、私は...それは次のようになります

self.timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: #selector(print("1")), userInfo: nil, repeats: true) 

を思うだろう。しかし、これは動作しませんし、私はあなたのように掲示Q & Aを通じて見

Argument of '#selector' does not refer to an initializer or method 

エラーになりますまあ、残念ながら私はまだそれを取得しません。セレクタのために "YourClass.doAStep"や "Class.buttonPressed"や "Class.test"のような擬似コードがたくさんあります。

+0

代わりに使用してください! – Smit

+1

@Smitそれは助けにはならない - OPが解決している問題はループで対処できない。 – dasblinkenlight

答えて

3

あなたは、Cocoaアプリケーションがイベントを処理する方法を誤解します。メソッドは、メソッドが終了するまでイベントに応答しません。

2秒ごとに何かを行う適切な方法は、ループを使用するのではなく、タイマーを設定することです。タイマーを停止するには、停止ボタンの押下を変更してください:

// This goes into your viewWillAppear 
self.timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: #selector(MyClass.doOneStepOfYourLoop), userInfo: nil, repeats: true) 

// This goes into your stopButtonPressed handler 
self.timer.invalidate() 
+0

私のviewWillAppearearに入りますか?申し訳ありません比較的迅速に新しいです。私は上記の考え方で上記の考え方を試してみました var timer = NSTimer() 以降のforループで、私は行を追加しました self.timer = NSTimer.scheduledTimerWithTimeInterval(2、target:self、selector:#selector print(num))、userInfo:nil、繰り返し:true) forループ。 #selectorがメソッドを入力として受け入れたくないという点を除いて、ほとんどそれはOKです。 何が間違っていますか? –

+0

@AdamHループはまったくありません。ビューが表示されたらタイマーをスケジューリングし、タイマーのハンドラーでループのボディの作業を行い、ボタンが押されたりビューが消えるとタイマーを終了します。セレクタの構文が変更されました。ここには[関連Q&A](http://stackoverflow.com/q/24007650/335858)があります。 – dasblinkenlight

+1

実際には、編集で質問を無視することができます。この動画を見てやっとそれを手に入れました。 https://www.youtube.com/watch?v=umErDZ8i8Ug –

関連する問題