Je mets à jour mon application à la syntaxe Swift 3.0 (je sais qu'elle est toujours en version bêta mais je veux être préparé dès sa sortie).
Jusqu'à la précédente version bêta de Xcode (bêta 5), je pouvais comparer deux Date
objets en utilisant les opérandes <
, >
et ==
. Mais dans la dernière version bêta (bêta 6), cela ne fonctionne plus. Voici quelques captures d'écran:
Comme vous pouvez le voir sur les deux captures d'écran, ce sont deux Date
objets. Mais j'obtiens l'erreur suivante:
Qu'est-ce que je fais mal? Les fonctions sont toujours déclarées dans la Date
classe:
static func >(Date, Date)
Renvoie vrai si la date de gauche est postérieure à la date de droite.
Est-ce juste un bug bêta ou est-ce que je fais quelque chose de mal?
let d1 = Date() ; let d2 = Date() ; if d1 > d2 { }
fonctionne dans mon Xcode 8 beta 6.Réponses:
J'ai essayé cet extrait (dans Xcode 8 Beta 6), et cela fonctionne très bien.
la source
2019-05-14 12:08:14 +0000
==2019-05-14
devrait retourner true. alors quoi?Date
isComparable
&Equatable
(à partir de Swift 3)Cette réponse complète la réponse de @Ankit Thakur.
Depuis Swift 3, la
Date
structure (basée sur laNSDate
classe sous-jacente ) adopte les protocolesComparable
etEquatable
.Comparable
exige queDate
mettre en œuvre les opérateurs:<
,<=
,>
,>=
.Equatable
nécessite queDate
mettre en œuvre l'==
opérateur.Equatable
permetDate
d'utiliser l'implémentation par défaut de l'!=
opérateur (qui est l'inverse de l'Equatable
==
implémentation de l' opérateur).L'exemple de code suivant exerce ces opérateurs de comparaison et confirme quelles comparaisons sont vraies avec des
print
instructions.Fonction de comparaison
Exemple d'utilisation
la source
à partir de Swift 3 et supérieur, la date est comparable afin que nous puissions comparer directement des dates telles que
Alternativement, nous pouvons créer une extension sur Date
Utilisation:
let isEqual = date1.isEqualTo(date2)
la source
2019-05-14 12:08:14 +0000
==2019-05-14
devrait retourner true. alors quoi?Regardez ceci http://iswift.org/cookbook/compare-2-dates
Obtenir des dates:
Utilisation de l'instruction SWITCH
utilisation de l'instruction IF
la source
Pour moi, le problème était que j'avais ma propre extension à la classe Date qui définissait tous les opérateurs de comparaison. Maintenant (depuis swift 3) que Date est comparable, ces extensions ne sont plus nécessaires. Alors je les ai commentés et ça a marché.
la source
SWIFT 3: Je ne sais pas si c'est ce que vous recherchez. Mais je compare une chaîne à un horodatage actuel pour voir si ma chaîne est plus ancienne que maintenant.
Pour l'utiliser:
la source
Pour comparer la date uniquement avec année - mois - jour et sans heure pour moi a fonctionné comme ceci:
la source
Si vous voulez ignorer les secondes par exemple, vous pouvez utiliser
func isDate (Date, equalTo: Date, toUnitGranularity: NSCalendar.Unit) -> Bool
Exemple de comparaison si c'est le même jour:
la source
Au moment d'écrire ces lignes, Swift prend nativement en charge la comparaison des dates avec tous les opérateurs de comparaison (c. -à
<
,<=
,==
,>=
et>
). Vous pouvez également comparer les dates en option mais sont limités<
,==
et>
. Si vous avez besoin de comparer deux dates facultatives en utilisant<=
ou>=
, ieVous pouvez surcharger les opérateurs
<=
et>=
pour prendre en charge les options:la source
la source
Une autre façon de le faire:
la source
la source
Swift 5:
1) Si vous utilisez le type de date:
2) Si vous utilisez le type String:
Je ne suis pas sûr ou la deuxième option fonctionne à 100%. Mais à quel point je ne changerais pas les valeurs de firstStringDate et secondStringDate, le résultat était correct.
la source
dans Swift 3,4, vous devez utiliser "Compare". par exemple:
la source