Swift 每次我点击按钮,它只会增加50个增量,
当我在模拟器上单击按钮时,它会不断增加50。我认为这可能不是在保存“latestTerminationDate”,也可能不是在拉它。谢谢你的帮助Swift 每次我点击按钮,它只会增加50个增量,,swift,if-statement,nsuserdefaults,Swift,If Statement,Nsuserdefaults,当我在模拟器上单击按钮时,它会不断增加50。我认为这可能不是在保存“latestTerminationDate”,也可能不是在拉它。谢谢你的帮助 @IBOutlet weak var coalRunButton: UIButton! var coalMayham = 1 @IBAction func coalRunButton(_ sender: Any) { if let buttonPress = UserDefaults.standard.object(forKey: "but
@IBOutlet weak var coalRunButton: UIButton!
var coalMayham = 1
@IBAction func coalRunButton(_ sender: Any) {
if let buttonPress = UserDefaults.standard.object(forKey: "buttonPress") as? Date,
let terminationDate = UserDefaults.standard.object(forKey: "latestTerminationDate") as? Date {
var terminationDuration = buttonPress.timeIntervalSince(terminationDate)
if terminationDuration >= 86400 {
_ = 86400
do { UserDefaults.standard.set(Date(), forKey: "latestTerminationDate")
UserDefaults.standard.synchronize()
let dailyCoalAccumulate = ((Int(terminationDuration)) * coalMayham) + Int(coalPile.text!)!
coalPile.text = String(dailyCoalAccumulate)
UserDefaults.standard.set(Data(), forKey:"totalCoal")
}
} else {
terminationDuration = 50
UserDefaults.standard.set(Date(), forKey: "latestTerminationDate")
UserDefaults.standard.synchronize()
let dailyCoalAccumulate = ((Int(terminationDuration)) * coalMayham) + Int(coalPile.text!)!
coalPile.text = String(dailyCoalAccumulate)
UserDefaults.standard.set(Data(), forKey:"totalCoal")
}
} else {
let terminationDuration = 40
UserDefaults.standard.set(Date(), forKey: "latestTerminationDate")
UserDefaults.standard.synchronize()
let dailyCoalAccumulate = ((Int(terminationDuration)) * coalMayham) + Int(coalPile.text!)!
coalPile.text = String(dailyCoalAccumulate)
UserDefaults.standard.set(Data(), forKey:"totalCoal")
}
}
这行代码:
let terminationDate = UserDefaults.standard.object(forKey: "latestTerminationDate") as? Date
UserDefaults.standard.set(Date(), forKey: "latestTerminationDate")
不会返回您认为它的功能。因为在这行代码中:
let terminationDate = UserDefaults.standard.object(forKey: "latestTerminationDate") as? Date
UserDefaults.standard.set(Date(), forKey: "latestTerminationDate")
您输入的Date()
看起来像:“2018-10-04 15:30:22+0000”
这比不上86400
因此:
if terminationDuration >= 86400
失败并恢复为:
else {
terminationDuration = 50
编辑
修复示例:
func getMillisecondsNow() -> Int64{
let currentDate = Date()
return getMillisecondsFromDate(date: currentDate)
}
func getMillisecondsFromDate(date: Date) -> Int64{
var d : Int64 = 0
let interval = date.timeIntervalSince1970
d = Int64(interval * 1000)
return d
}
func getTimeDifferenceFromNowInMilliseconds(time: Int64) -> Int64{
let now = getMillisecondsNow()
let diff: Int64 = now - time
return diff
}
这将以毫秒为单位,因此您需要使用86400000(24小时内的毫秒)而不是86400(24小时内的秒)
现在,在您的代码中,只需使用以下命令以毫秒为单位节省终止时间:
let now = getMillisecondsNow()
UserDefaults.standard.set(now, forKey: "latestTerminationDate")
let terminationTime = UserDefaults.standard.object(forKey: "latestTerminationDate") as? Int64
let timeDiff = getTimeDifferenceFromNowInMilliseconds(time: terminationTime)
if timeDiff >= 86400000 {
}
else {
}
这段代码用于检索和获取以毫秒为单位的时差:
let now = getMillisecondsNow()
UserDefaults.standard.set(now, forKey: "latestTerminationDate")
let terminationTime = UserDefaults.standard.object(forKey: "latestTerminationDate") as? Int64
let timeDiff = getTimeDifferenceFromNowInMilliseconds(time: terminationTime)
if timeDiff >= 86400000 {
}
else {
}
@谷仓我怎么能修好它应该是24小时内的几秒钟。我不希望他们积累的超过。@sillyJohn::更新了答案,为解决方案提供了基础。这只是一条指导线。您需要将代码放在正确的位置。为什么毫秒秒因为大多数语言(obj-c、java、swift、c#…)都同意提供一个特定日期的参考“时间”:1970年1月(我忘了确切日期)。这些语言提供了一个内置的方法来获取从现在到现在的时间差(毫秒)。在Swift中这是
timeIntervalSince1970()
在java中这是getTimeInMillis()
。如果两个代码基(Swift和Java)同时调用相关方法(由于毫秒的原因,这种可能性很小,但是…),它们将返回相同的Int64值!既然你已经接受了一个很好的问题答案,你能编辑你的问题标题来反映一些可能对其他人有帮助的东西吗?“…它只增加了50个增量,”真的对任何人都没有帮助。谢谢