de Apple doc: para calcular una secuencia de fechas, utilice el enumerateDatesStartingAfterDate: matchingComponents: Opciones: usingBlock: método en lugar de llamar a este método ( - nextDateAfterDate: matchingComponents: Opciones: ) en un bucle con el resultado de la iteración del bucle anterior.
A medida que fui, que se repetirá todas las fechas que coincidían con "matchingComponents" hasta acabar con la iteración "stop.memory = true"
let calendar = NSCalendar.currentCalendar()
let startDate = calendar.startOfDayForDate(NSDate())
let finishDate = calendar.dateByAddingUnit(.Day, value: 10, toDate: startDate, options: [])
let dayComponent = NSDateComponents()
dayComponent.hour = 1
calendar.enumerateDatesStartingAfterDate(startDate, matchingComponents: dayComponent, options: [.MatchStrictly]) { (date, exactMatch, stop) in
print(date)
if date!.compare(finishDate!) == NSComparisonResult.OrderedDescending {
// .memory gets at the value of an UnsafeMutablePointer
stop.memory = true
}
}
Gracias, creo que esto es lo que estaba buscando. Sin embargo, la condición en el ciclo while siempre devuelve verdadero. '(LLDB) po endDate' ' (NSDate *) $ 6 = 0x06b9cc60 2012-03-11 00:12:42 + 0000' '(LLDB) po currentDate' ' (NSDate *) $ 7 = 0x06b9dd20 2012- 03-11 00:12:42 + 0000' Pero el valor de retorno todavía es verdadero. – joostevilghost
Supongo que ejecutó esto con startDate = [NSDate date] y endDate = [NSDate date], que da como resultado dos fechas que no son idénticas, pero que son muy similares (en algunos milisegundos). Modifiqué esto para que sea seguro para esta condición, aunque si está usando un selector de fecha, probablemente no será un problema, ya que las fechas se establecerán manualmente en 00: 00: 00.0, no en 00:12 : 42.xx y 00: 12: 42.yy – gaige
Esto funciona muy bien, pero me encontré con un problema donde me faltaba la fecha de finalización en noviembre. Resultó ser el horario de verano. Agregue esto a su declaración NSCalendar para evitar que '[currentCalendar setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @" GMT "]]; // ignorar el horario de verano' – smokingoyster