如何保存用户在swift中按下按钮的日期?

时间:2017-07-27 14:51:25

标签: ios swift nsuserdefaults

我希望代码每天运行一次,但我想要实现此目的的方法是在单击按钮后禁用该按钮,然后在超过24小时后重新启用该按钮。

以下代码是否正确,只保存用户按下按钮的日期?

if distance < radius{
    Total_Points += 10
    pointsLabel.text = "Total Points: \(Total_Points)"

    getPointsOutlet.isEnabled = false

    let clickdate = UserDefaults.standard

    if var timeList = clickdate.object(forKey: "timeList") as? [Date]{
        timeList.append(Date())
        clickdate.set(timeList, forKey: "timeList")
    } else {
        clickdate.set([Date()], forKey: "timeList")
    }
    clickdate.synchronize()
}


let PointsDefault = UserDefaults.standard
PointsDefault.setValue(Total_Points, forKey: "Total Points")

2 个答案:

答案 0 :(得分:0)

当您点击按钮时,您可以使用Userdefaults保存日期值,然后在ViewDidAppear内,ViewDidload和UIApplicationWillEnterForeground通知方法将检查从用户默认值中获取dateValue,然后取当前日期和上次存储日期的差异,从而启用按钮。

lazy var userDefaults: UserDefaults = {
        return UserDefaults.standard
    }()
func ViewDidLoad() {
  UserDefaults.set(Date(), forKey:"date")
  userDefaults.synchronize()
}

func someMethodWhereYouWantToGetValue() {
 guard let value = userDefaults.object(forKey: "date") as? Date else 
{return}
 print(value)
}

答案 1 :(得分:0)

您的代码

let clickdate = UserDefaults.standard

if var timeList = clickdate.object(forKey: "timeList") as? [Date]{
    timeList.append(Date())
    clickdate.set(timeList, forKey: "timeList")
} else {
    clickdate.set([Date()], forKey: "timeList")
}
clickdate.synchronize()

可以将日期添加到已保存日期的数组中。你可以把它拉成一个单独的函数:

func addDateToDefaults(date: Date? = nil) {
    let defaults = UserDefaults.standard

    if date = nil {
        date = Date()
    }

    if var timeList = defaults.object(forKey: "timeList") as? [Date]{
        timeList.append(date)
        defaults.set(timeList, forKey: "timeList")
    } else {
        defaults.set([date!], forKey: "timeList")
    }
}

然后你可以通过按钮动作调用它:

@IBAction func buttonClicked(_ sender: UIButton) {
    addDateToDefaults()
    //The rest of your button action code goes here
}

使用上面的函数addDateToDefaults(),您可以传递特定日期,或者不使用日期参数,它会将当前日期追加到您的日期数组中。