2016-10-26 6 views
3

私は初心者でXcode 8でSwift 3を学び、 "Eggtimer"という基本的なアプリを構築していました。以下にコードが書かれていて、timerlabel.textがどのようにタイマーにリンクされているのかわからないが、それらの間の接続を設定していない。関係を理解し​​たい

スターの隣に} else { timer.invalidate()と書くことができます。labeltimer.textはうまくいきませんが、どのように起こりますか? timerselectorのプロパティは何を意味しますか? 私の英語のために申し訳ありません、あなたの答えに感謝します。

class ViewController: UIViewController { 
    var timer = Timer() 
    var time = 210 

    func decreasetimer() { 
     if time > 0 { 
      time -= 1 
      timerlabel.text = String(time) 
     } else { //* 
      timerlabel.text = String(time) 
     } 
    } 

    @IBOutlet var timerlabel: UILabel! 

    @IBAction func timerstarter(_ sender: AnyObject) {   
     timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.processtimer), userInfo: nil, repeats: true) 
    } 
}  
+0

コードを実行すると、タイマーは特定の時間間隔が経過するまで待ってから起動し、指定されたメッセージをターゲットオブジェクトに送信します。ここで、timeintervalは1です。targetはあなたのViewControllerオブジェクトです。メッセージはセレクタ内の関数に送信されます。 私はあなたがすでに上記を知っていると信じています。これがどのように機能するかをよく理解するために、RunLoopsのドキュメントを参照することをお勧めします。 https://developer.apple.com/reference/foundation/runloop – KrishnaCA

+0

たとえば、 '-processtimer(:_)'メソッドの本体にいくつかの接続があるかもしれません。この現在のスニペットでは、その方法はまったく表示されません。 – holex

答えて

2

底部から開始します:selectorは、1秒ごと(timeIntervalパラメータ)と呼ばれるべき方法を指定します。あなたのケースでは、これは次のように変更します。

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.decreasetimer), userInfo: nil, repeats: true) 

あなたがトップで指定した方法である、selectordecreasetimerと呼ばれている見ることができるように。

タイマーは、更新するたびにこのメソッドを呼び出すようになりました。この方法では、time varを減らし、timerlabelのテキストを更新します。 timeが、私はこれがあなたの質問を明確に願っています0

に達したときに

timer.invalidate()timerをstopps。

+0

ありがとう、Hannes。タイマーが "While ..."の役割を果たしているように聞こえますが、一定の時間間隔をおいています。 –

関連する問題