在NSDate()中每秒更新一次函数 – Swift

我有一个function,给我一个时间,当应用程序打开,但我不希望它是静态我希望它是dynamic的,每秒更新。 我想它正在循环,但我不知道该怎么做。 做一个循环可以工作,但如果你有一个更好的方法,请回答。 这是我的function:

func timeNowString() -> NSString { let date = NSDate() var outputFormat = NSDateFormatter() outputFormat.locale = NSLocale(localeIdentifier:"en_US") outputFormat.dateFormat = "HH:mm:ss" let timeString = outputFormat.stringFromDate(date) return timeString; } 

问:我如何使这个functiondynamic? 所以它每秒更新,而不是静态标签。

如果您有任何问题,请在下面留言。

尝试这个。 你需要添加一个标签和一个button,并将它们连接到textLabel并启动IBAction。 你可以修改这个来添加小时(这里只是分钟/秒),并在需要的地方添加一个timer.invalidate()。

 import UIKit class ViewController: UIViewController { @IBOutlet var timeLabel: UILabel! @IBAction func start(sender: AnyObject) { var timer = NSTimer() if !timer.valid { let selector : Selector = "countTime" timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target:self, selector: selector, userInfo: nil, repeats: true) startTime = NSDate.timeIntervalSinceReferenceDate() } let timeNow = timeNowString() as String for item in timeNow { time = timeNow.componentsSeparatedByString(":") } } var time = [String]() var startTime = NSTimeInterval() override func viewDidLoad() { super.viewDidLoad() } func countTime() { var currentTime = NSDate.timeIntervalSinceReferenceDate() var elapsedTime: NSTimeInterval = currentTime - startTime var adjustedTime = Int(elapsedTime) + 3600*time[0].toInt()! + 60*time[1].toInt()! + time[0].toInt()! var hours = Int(Double(adjustedTime)/3600.0) let minutes = Int(Double(adjustedTime - hours*3600)/60.0) let seconds = adjustedTime - hours*3600 - minutes*60 let startHours = hours > 9 ? String(hours):"0" + String(hours) let startMinutes = minutes > 9 ? String(minutes):"0" + String(minutes) let startSeconds = seconds > 9 ? String(seconds):"0" + String(seconds) timeLabel.text = "\(startHours):\(startMinutes):\(startSeconds)" } func timeNowString() -> NSString { let date = NSDate() var outputFormat = NSDateFormatter() outputFormat.locale = NSLocale(localeIdentifier:"en_US") outputFormat.dateFormat = "HH:mm:ss" let timeString = outputFormat.stringFromDate(date) return timeString; } }