2

我正在使用 Swift 4 编写一个应用程序。此应用程序首先获取当前设备时间并将其放入currentTimeLabel格式为的标签 () 中HH:mm

它还以字符串形式从 firebase 数据库获取不同时区的时间,并将其放入两个标签(currentSharedTimeLabeltimeReceivedFromServerLabel)中,格式也是HH:mm. 从服务器检索的数据还包括秒数。显然,这第二次没有改变——但我希望它表现得像用户期望的那样,即我想每秒添加一秒到服务器时间。

为此,我首先使用以下代码将共享时间从字符串更改为格式化时间:

let isoDate = timeReceivedFromServerLabel.text
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm:ss"
let mathDate = dateFormatter.date(from: isoDate!)

然后我想运行一个函数,它每秒增加一秒mathDate并将结果放入currentSharedTimeLabel. 你能给我一个关于如何实现这一目标的想法吗?

目前,它完全没有成功,我正在做:

for i in 0..<1314000 {
    let j = i + 1
    print(i, j)

    let newCalcTime = mathDate?.addingTimeInterval(TimeInterval(j))
    currentSharedTimeLabel.text = ("\(newCalcTime)")
    print("\(String(describing: newCalcTime))")

我在这方面有点迷茫,我将不胜感激。

(我希望我已经把我的问题说清楚了,不要因为缺乏或肤浅的信息而让你不安)。

编辑 2:数据库观察者代码(更新 Cocoapods 后)

// SUBMIT BUTTON
    let submitAction = UIAlertAction(title: "Submit", style: .default, handler: { (action) -> Void in
        let textField = alert.textFields![0]
        self.enterSharingcodeTextfield.text = textField.text

        // SEARCHES FOR SHARING CODE IN DATABASE (ONLINE)
        let parentRef = Database.database().reference().child("userInfoWritten")

        parentRef.queryOrdered(byChild: "sharingcode").queryEqual(toValue: textField.text).observeSingleEvent(of: .value, with: { snapshot in

            print(snapshot)

            // PROCESSES VALUES RECEIVED FROM SERVER
            if ( snapshot.value is NSNull ) {

                // DATA WAS NOT FOUND
                // SHOW MESSAGE LABEL
                self.invalidSharingcodeLabel.alpha = 1

            } else {

                // DATA WAS FOUND
                for user_child in (snapshot.children) {
4

1 回答 1

1

我认为这听起来像是Timer.

假设您将当前时间转换为以秒为单位的存储在currentTimeInSeconds变量中。

您可以在每次视图控制器出现时更新它的值,然后使用计时器在本地更新它的值,直到用户离开视图控制器,这会给用户留下它像“实际”时钟一样工作的印象。

因此,您在班级范围内的顶部定义了计时器:

var timer = Timer()

您可以viewDidAppear像这样初始化计时器:

timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)

updateTimer()它会每秒调用你的方法:

func updateTimer() {
    currentTimeInSeconds += 1
}

然后,您唯一需要做的就是将时间转换currentTimeInSeconds为时间hh:mm:ss,您应该一切顺利!

或者,您也可以使用Date'addTimeInterval()方法在您的方法中直接增加Date一秒updateTimer(),具体取决于您何时(如果)要将NSNumber您从 Firebase 数据库获得的转换为 aDate或不。

当用户离开视图控制器()时,不要忘记使计时器无效viewDidDisappear

timer.invalidate()
于 2017-09-17T12:39:46.923 回答