2017-05-11 44 views
2

我只是想實現一個簡單的時鐘,這裏是我的故事板:Swift:爲什麼我的標籤不更新,即使我使用計時器來更改其文本屬性?

enter image description here

代碼:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var timeLabel: UILabel! 
    let dateFormatter = DateFormatter() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     dateFormatter.dateFormat = "hh:mm:ss" 
     _ = Timer.init(timeInterval: 0.1, target: self, selector: #selector(updateClock), userInfo: nil, repeats: true) 
    } 

    func updateClock() { 
     self.timeLabel.text = dateFormatter.string(from: Date()) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

標籤只是不斷顯示00:00:00。任何人都可以給我一些關於這個的建議嗎?

+0

順便說一句,請不要做'Foo.init(...)'。這完全沒有必要; Swiftier的方法是隻寫'Foo(...)'! – jtbandes

回答

3

您必須創建一個Timer(您已完成)和時間表它。它將它添加到運行循環中,所以它會實際觸發。

做到這一點是使用Timer.scheduledTimer(timeInterval:target:selector:userInfo:repeats:)最簡單的方法,這既創建和調度Timer

_ = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(updateClock), 
    userInfo: nil, repeats: true) 

請注意,你應該還存儲弱引用到Timer,這樣你就可以使它無效時你想讓它停止射擊。

相關問題