每次我点击按钮它只会增加 50 个增量,
Every time I click the button it only adds 50 increments,
当我在模拟器上单击按钮时,它一直在添加 50。我认为它可能没有保存 "latestTerminationDate",或者可能没有提取它。感谢您的帮助
@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")
您输入的 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 {
}
当我在模拟器上单击按钮时,它一直在添加 50。我认为它可能没有保存 "latestTerminationDate",或者可能没有提取它。感谢您的帮助
@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")
您输入的 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 {
}