Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在NSDate()中每秒更新一次时间函数-Swift_Ios_Swift - Fatal编程技术网

Ios 在NSDate()中每秒更新一次时间函数-Swift

Ios 在NSDate()中每秒更新一次时间函数-Swift,ios,swift,Ios,Swift,我有一个函数,可以给我一个打开应用程序的时间,但我不希望它是静态的,我希望它是动态的,每秒钟更新一次。我以为这是一个循环,但我不知道如何着手去做。做一个循环可能有效,但如果你有更好的方法,请回答。以下是我的功能: func timeNowString() -> NSString { let date = NSDate() var outputFormat = NSDateFormatter() outputFormat.locale = N

我有一个函数,可以给我一个打开应用程序的时间,但我不希望它是静态的,我希望它是动态的,每秒钟更新一次。我以为这是一个循环,但我不知道如何着手去做。做一个循环可能有效,但如果你有更好的方法,请回答。以下是我的功能:

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;
    } 
问题:如何使此函数动态化?所以它每秒钟都在更新,而不是一个静态标签


如果您有任何问题,请在下面进行评论。

试试这个。您需要添加一个标签和一个按钮,将它们连接到textLabel并启动iAction。您可以对此进行修改以添加小时(此处仅为分钟/秒),并在需要时添加计时器。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;
    }
}

可能是NSTimer或类似的东西,可能在后台线程中有日期和格式逻辑(如果它太密集)。@millesmith我只是想实时显示时间,这样行吗?@grapeaplesauce是的,行。阅读。@TheParamagneticCroissant在我的案例中如何使用NSTimer您阅读了官方文档,然后使用它。这只是从0开始计算。您如何使它从实时开始计算?您必须获得实时并使用我给您的方法从那里开始计算。我从您的代码中假设您知道如何以正常日期格式获取当前时间。
func timeNowString()->NSString{let date=NSDate()var outputFormat=NSDateFormatter()outputFormat.locale=NSLocale(localeIdentifier:“en_US”)outputFormat.dateFormat=“HH:mm:ss”让timeString=outputFormat.stringFromDate(date)return timeString;}
是获取实时的代码,但如何在代码中实现它。谢谢你,你在我所有的问题上都帮了我很大的忙。请试一试。让我们一起来。