2017-08-03 72 views
0

我試圖用Swift創建一個標籤,它將在每秒更新一次。我一直在嘗試幾個小時(我最近纔開始使用Swift),但我一直無法完成它。在Swift 3中顯示當前時間的更新標籤

我已閱讀了一些文檔並查看了其他人的答案。到目前爲止,我有這樣的:

import Cocoa 

class ViewController: NSViewController { 

    @IBOutlet weak var timeLabel: NSTextField! 

    var timer = Timer() 

    let date = Date() 
    let calendar = Calendar.current 
    let dateFormatter = DateFormatter() 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
    dateFormatter.dateStyle = .none 
    dateFormatter.timeStyle = .medium 
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTimeLabel), userInfo: nil, repeats: true); 
    } 

    override var representedObject: Any? { 
    didSet { 
    // Update the view, if already loaded. 
    } 
    } 

    func updateTimeLabel() { 
    timeLabel.stringValue = dateFormatter.string(from: date) 
    } 

} 

那麼這是什麼一樣的是,它更新時間標籤 - 但只有一次 - 這是視圖加載時。儘管我在viewDidLoad函數中添加了Timer,但間隔爲1秒,標籤保持靜態。

任何人都可以指出我在這裏做錯了嗎?

回答

1

date是您的代碼中的常量。 它永遠不會改變。

您應該重新初始化更新發生的日期。

func updateTimeLabel() { 
    timeLabel.stringValue = dateFormatter.string(from: Date()) 
} 
+0

哇,好趕上!我不敢相信我花這麼多時間在這麼簡單的錯誤上。我贊成你,但它不會顯示,直到我有15聲望。 – zec

0
你的情況 updateTimeLabel

被後每秒鐘調用,但因爲它是一次與當前的日期設置date不可改變變量沒有被更新。此外,如果您想更新date常數,則需要使用var而不是let

獲得更新的日期時間,每次你updateTileLabel叫你需要做以下

func updateTimeLabel() { 
    timeLabel.stringValue = dateFormatter.string(from: Date()) 
}