Pour la première partie, utilisez la réponse de @kperryua pour construire le NSDate objets que vous souhaitez comparer. De votre réponse à votre propre question, on dirait que vous avez compris.
Pour comparer les dates, je suis totalement d'accord avec @Tim'commenter votre réponse. C'est plus concis encore fait exactement équivalent à celui de votre code, et je vais vous expliquer pourquoi.
+ (BOOL) date:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endDate {
return (([date compare:beginDate] != NSOrderedAscending) && ([date compare:endDate] != NSOrderedDescending));
}
Bien qu'il puisse sembler que la demande de retour doit évaluer les deux opérandes de l'opérateur&, ce n'est effectivement pas le cas. La clé est "court-circuit d'évaluation", qui est mis en œuvre dans une grande variété de langages de programmation, et certainement dans C. en gros, les opérateurs &
et &&
"court-circuit" si le premier argument est 0 (ou PAS, nul, etc.), alors qu' |
et ||
faire de même si le premier argument n'est pas 0. Si date
"vient avant" beginDate
, le test renvoie NO
, sans même avoir besoin de comparer avec endDate
. Fondamentalement, il fait la même chose que votre code, mais dans un rapport simple sur une seule ligne, pas de 5 (ou 7, avec des espaces).
C'est conçu comme une contribution constructive, depuis quand les programmeurs à comprendre la façon dont leur langage de programmation particulier évalue des expressions logiques, ils peuvent construire eux plus efficacement sans pour autant l'efficacité. Cependant, il existe des tests qui permettrait d' être moins efficace, puisque tous les opérateurs de court-circuit. (En effet, la plupart ne peuvent pas court-circuit, comme le numérique, les opérateurs de comparaison.) En cas de doute, il est toujours plus sûr d'être explicite dans la séparation de votre logique, mais le code peut être beaucoup plus lisible lorsque vous laissez la langue/compilateur gérer le peu de choses pour vous.