如何保存用户快速按下按钮的日期?

问题描述:

我希望代码每天运行一次,但我想要完成此操作的方式是在单击该按钮后禁用该按钮,然后在超过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

每次调用UserDefaults.standard时都不需要创建新变量,您可以按原样使用它(例如'UserDefaults.standard.setValue(...)'或定义它一次并重用它(例如'let defaults = UserDefaults.standard'和更高版本'defaults.setValue(...)' – Paolo

+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) 
} 
+0

谢谢,但我怎么保存日期?我试图在我的代码上面,但我不知道它是否正确 –

+0

试试这个: - 让def = UserDefaults.standard \t \t def.set(NSDate(),forKey:“日期“) \t \t print(def.object(forKey:”date“)) –

+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(),你可以通过在特定的日期,或离开关闭日期参数,它会将当前日期附加到日期数组中。