Каждый раз, когда я нажимаю кнопку, он добавляет только 50 шагов, - PullRequest
0 голосов
/ 04 октября 2018

Когда я на симуляторе и нажимаю на кнопку, он продолжает добавлять 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")
   }
}

1 Ответ

0 голосов
/ 04 октября 2018

Эта строка кода:

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



РЕДАКТИРОВАТЬ

ПРИМЕР FIX:

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 {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...