【问题标题】:Filter by day from NSDate in Realm, Swift从 NSDate 在 Realm、Swift 中按天过滤
【发布时间】:2016-06-26 08:17:27
【问题描述】:

所以,我将NSDate 放入Realm 模型中:

class GeneralList: Object {
    dynamic var createdAt = NSDate()
    dynamic var notes = ""
}

例如,如何获取 27.03.2016 中的所有“笔记”?

【问题讨论】:

    标签: swift filter realm


    【解决方案1】:

    所以,我找到了简单的方法:

    1. 为 String 创建公共扩展并使用单独的 NSDate 创建函数:

       public static func sepaDate(whatNeed: String) -> String  {
       var currentDate = NSDate()
      let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
      
      let dateComponents = calendar!.components([.Day, .Month, .Year, .Minute, .Hour], fromDate: currentDate)
          var forReturn: String = "0"
          switch whatNeed {
              case "day":
                  let valu = String(dateComponents.day)
                  forReturn = valu
              case "month":
              let valu = String(dateComponents.month)
              forReturn = valu
              case "year":
              let valu = String(dateComponents.year)
              forReturn = valu
              case "hour":
              let valu = String(dateComponents.hour)
              forReturn = valu
              case "minute":
              let valu = String(dateComponents.minute)
              forReturn = valu
              default: print("Error")
          }
          return forReturn
      }
      }
      
    2. 在 Realm 类中,创建单独的日期:

      dynamic var minute = String.sepaDate("minute")
      dynamic var hour = String.sepaDate("hour")
      dynamic var day = String.sepaDate("day")
      dynamic var month = String.sepaDate("month")
      dynamic var year = String.sepaDate("year") 
      
    3. 在 ViewController 中调用谓词

       let dayday = String(dateComponents.day)
               let monthmonth = String(dateComponents.month)
               let yearyear = String(dateComponents.year)
              let predicate = NSPredicate(format: "day = %@ AND month = %@ AND year = %@", dayday, monthmonth, yearyear)
              generalRecords = uiRealm.objects(GeneralList).filter(predicate) 
      

    我希望它对某人有所帮助......

    【讨论】:

      【解决方案2】:

      你可以实现这个功能,来自Rafaelanswer

      private func createMessageRealmModelFromIncomingMessage(incomingMessage: MessageRestModel) -> MessageRealmModel {
          let messageRealmModel = MessageRealmModel()
      
          messageRealmModel.id = incomingMessage.id!
          messageRealmModel.messageType = "CHAT_MESSAGE"
          messageRealmModel.value = (incomingMessage.content?.value)!
          messageRealmModel.senderId = incomingMessage.senderId!
          messageRealmModel.recipientId = incomingMessage.recipientId!
          messageRealmModel.sendDate = incomingMessage.sendDate!
          messageRealmModel.serverDeliveryDate = incomingMessage.serverDeliveryDate!
          messageRealmModel.receiverDeliveryDate = NSDate().msFromEpoch()
      
          return messageRealmModel
      }
      

      然后将其用作 Realm 的 filter 函数的参数,如下所示:

      var c = NSDateComponents()
      c.year = 2016
      c.month = 3
      c.day = 27
      
      var date = NSCalendar(identifier: NSCalendarIdentifierGregorian)?.dateFromComponents(c)
      
      let generalListsInDay = realm.objects(GeneralList).filter(self.predicateForDayFromDate(day))
      

      执行此代码后,您的 generalListsInDay 应包含 27.03.2016 中的所有 GeneralList

      【讨论】:

        猜你喜欢
        • 2020-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多