我希望代码每天运行一次,但我想要实现此目的的方法是在单击按钮后禁用该按钮,然后在超过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")
答案 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()
,您可以传递特定日期,或者不使用日期参数,它会将当前日期追加到您的日期数组中。