swift - 每次我点击按钮它只会增加 50 个增量,

标签 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:  "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 {
}

关于swift - 每次我点击按钮它只会增加 50 个增量,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52650531/

相关文章:

java IF 语句对我不起作用,并且我的变量遇到问题

ios - 在 Swift 中通过 UserDefaults 保存游戏分数排名的最佳方式

ios - 解码不匹配的数据类型时应用程序崩溃 : how to verify type before decoding with NSCoding?

ios - 如何使用 NSUserDefault 将选定的 TableViewCell 文本发送到之前的 ViewController

ios - UITapGestureRecognizer - 忽略顶部对象的点击并将其传递到其下方的对象

ios - UITextView 限制字符数和剩余显示数

ios - 如何使用 RxSwift 将数据添加到 tableview 或 collectionview

Swift:为什么我不能在这里添加 2 个整数?

java - 在 if 语句的条件内调用函数

javascript - 警报声明不起作用