如何在调用日期变量时重新计算或更新自身?

时间:2017-11-25 03:29:23

标签: swift

在应用程序中,当用户点击作业完成时,我会收集时间戳供以后使用。before after 这样我就可以在另一个视图中显示作业何时完成。

我遇到的问题是,当用户点击作业完成后,变量不会改变。

以下是打印出来时数据结构的样子:

Moneypants.Points(user: "Father", itemName: "enter your top priority habit here", itemCategory: "daily habits", code: "C", valuePerTap: 24, itemDate: 1511579837.027503), 
Moneypants.Points(user: "Father", itemName: "pray & scripture study", itemCategory: "daily habits", code: "C", valuePerTap: 6, itemDate: 1511579837.027503), 
Moneypants.Points(user: "Father", itemName: "exercise (20 min)", itemCategory: "daily habits", code: "C", valuePerTap: 6, itemDate: 1511579837.027503), 
Moneypants.Points(user: "Father", itemName: "journal", itemCategory: "daily habits", code: "C", valuePerTap: 6, itemDate: 1511579837.027503), 
Moneypants.Points(user: "Father", itemName: "1-on-1 time with kid", itemCategory: "daily habits", code: "C", valuePerTap: 6, itemDate: 1511579837.027503)

正如您所看到的,每个项目的时间戳是相同的(它们各自显示时间戳“1511579837.027503”),尽管事实上我在几秒钟内分别敲击每个项目。

CODE

class UserVC: UIViewController {   
    var selectedDate: Date!

override func viewDidLoad() {
    super.viewDidLoad()

    selectedDate = Date()

当用户点击单元格以标记作业完成时,这是运行的代码:

let pointsArrayItem = Points(user: currentUserName,
                             itemName: (usersDailyJobs?[indexPath.row].name)!,
                             itemCategory: "daily jobs",
                             code: "C",
                             valuePerTap: dailyJobsPointValue,
                             itemDate: (selectedDate?.timeIntervalSince1970)!)

Points.pointsArray.append(pointsArrayItem)

我认为这很简单,但我无法理解。

1 个答案:

答案 0 :(得分:0)

我最终为日期创建了一个新变量,以便我可以“刷新”selectedDate变量。现在我的类有一个变量var selectedDateNumber,然后在ViewDidLoad方法中设置一个默认值。

class UserVC: UIViewController {
    ...
    var selectedDateNumber: Int!
}

override func viewDidLoad() {
    super.viewDidLoad()
    selectedDateNumber = 0
}

然后,当我需要使用当前日期/时间戳“刷新”它时,我在各种函数中使用此代码:

selectedDate = Calendar.current.date(byAdding: .day, value: selectedDateNumber, to: Date())

通过这种方式刷新数据,我可以获得项目的当前时间戳,包括前几天的时间戳。