簡體   English   中英

Swift 2 - 如果value在當前日期之前,則刪除數組中的NSDate值

[英]Swift 2 - remove NSDate values in array if value is before current date

在我的應用程序中,我創建了一個“NSDate”數組,以便發送本地通知。 保存的值是“UUID”和“deadline”,並使用let gameDictionary = NSUserDefaults.standardUserDefaults().dictionaryForKey(GAME_INFO) ?? [:]保存它們let gameDictionary = NSUserDefaults.standardUserDefaults().dictionaryForKey(GAME_INFO) ?? [:] let gameDictionary = NSUserDefaults.standardUserDefaults().dictionaryForKey(GAME_INFO) ?? [:]

結果與此類似:

[{
    UUID = "546C5E4D-CFEE-42F3-9010-9936753D17D85";
    deadline = "2015-12-25 15:44:26 +0000";
}, {
    UUID = "7C030614-C93C-4EB9-AD0A-93096848FDC7A";
    deadline = "2015-12-25 15:43:15 +0000";
}]

我想要實現的是將“截止日期”值與當前日期進行比較,如果截止時間早於當前日期,則需要從數組中刪除值。

func compareDeadline()  {

        let gameDictionary = NSUserDefaults.standardUserDefaults().dictionaryForKey(GAME_INFO) ?? [:]
        var items = Array(gameDictionary.values)

        for i in 0..<items.count {

            let dateNotification = items[i]["deadline"]!! as! NSDate

            print(dateNotification)

            var isOverdue: Bool {
                return (NSDate().compare(dateNotification) == NSComparisonResult.OrderedDescending) // deadline is earlier than current date
            }

            print(isOverdue)

            if (isOverdue == true){
                items.removeAtIndex(i)
            }

        }
    }

當我嘗試從數組中刪除值時,我得到Fatal Error: Array index out of range

任何想法我該如何解決這個問題?

您應該在數組上使用.filter方法來刪除該數組中不需要的任何內容。 結果是一個只有過濾結果的新數組。

.filter要求您在發送到它的閉包中設置過濾條件

這是一篇關於如何使用它的好文章

您可以使用swift數組的filter方法

例如,要過濾數組中的偶數:

func isEven(number: Int) -> Bool {
  return number % 2 == 0
}

evens = Array(1...10).filter(isEven)
println(evens)

有一些問題。 您收到錯誤的原因是因為在for-in塊內迭代時無法刪除元素。 您可以使用以下代碼過濾項目:

func compareDeadline()  {
  let gameDictionary = NSUserDefaults.standardUserDefaults().dictionaryForKey(GAME_INFO) ?? [:]
  let items = Array(gameDictionary.values)
  let currentDate = NSDate()
  let dateFormatter = NSDateFormatter()
  dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ssZ"

  let filteredItems = items.flatMap({
      guard let stringDeadline = $0["deadline"] as? String, let deadline = dateFormatter.dateFromString(stringDeadline) else {
        return nil
      }

      return deadline
  }).filter({
      currentDate.compare($0) == .OrderedDescending
  })
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM