Swift 3 - Comparaison de l'objet Date
Je suis à jour de mes applications sur Swift 3.0 syntaxe (je sais que c'est encore en version bêta, mais je veux être prêt dès qu'il est publié).
Jusqu'à ce que la précédente Bêta de Xcode (Beta 5) j'ai pu comparer les deux Date
objets à l'aide de la opérandes <
, >
et ==
. Mais dans la dernière version bêta (Bêta 6) ce n'est pas de travail, pas plus. Voici quelques captures d'écran:
Comme vous pouvez le voir dans les deux captures d'écran, ce sont deux Date
objets. Mais j'obtiens l'erreur suivante:
Ce que je fais mal? Les fonctions sont encore déclarés dans le Date
classe:
static func >(Date, Date)
Retourne true si la main gauche la Date la plus éloignée dans le temps que la main droite de la Date.
Est-ce juste une Beta bug ou ai-je fait quelque chose de mal?
let d1 = Date() ; let d2 = Date() ; if d1 > d2 { }
fonctionne dans mon Xcode beta 8 6.- Xcode 8.0 Beta 6?
- Oui. – Vous devriez la recherche de l'complet de message d'erreur dans le Rapport navigator.
- Merci @MartinR! Ne savais pas que je me permet de "plonger" dans une erreur et obtenir plus d'informations. M'a beaucoup aidé!
- accepter la réponse correcte
Vous devez vous connecter pour publier un commentaire.
J'ai essayé de cet extrait (dans XCode Beta 8 6), et il fonctionne très bien.
2019-05-14 12:08:14 +0000
= =2019-05-14
doit retourner true. alors quoi ?Date
estComparable
&Equatable
(comme de Swift 3)Cette réponse complète @Ankit Thakur réponse.
Depuis Swift 3 la
Date
struct (sur la base desNSDate
classe) adopte leComparable
etEquatable
protocoles.Comparable
exige queDate
mettre en œuvre les opérateurs:<
,<=
,>
,>=
.Equatable
exige queDate
mettre en œuvre les==
opérateur.Equatable
permetDate
pour utiliser la valeur par défaut de mise en œuvre de la!=
opérateur (ce qui est l'inverse de laEquatable
==
opérateur de mise en œuvre).L'exemple de code suivant des exercices de ces opérateurs de comparaison et qui confirme les comparaisons sont remplies avec
print
consolidés.Fonction de comparaison
Exemple D'Utilisation
de Swift 3 et au-dessus, la Date est Comparable de sorte que nous pouvons comparer directement les dates comme
Sinon, Nous pouvons créer une extension de la Date de
Utilisation:
let isEqual = date1.isEqualTo(date2)
2019-05-14 12:08:14 +0000
= =2019-05-14
doit retourner true. alors quoi ?Look de ce
http://iswift.org/cookbook/compare-2-dates
Dates:
À l'aide de l'Instruction SWITCH
utilisant l'Instruction if
Pour moi le problème était que j'avais ma propre extension à la classe Date qui a été la définition de comparer tous les opérateurs. Maintenant (depuis swift 3) cette Date est comparable, ces extensions ne sont pas nécessaires. J'ai donc commenté et cela a fonctionné.
SWIFT 3: Ne sais pas si c'est ce que vous cherchez. Mais je compare une chaîne à un timestamp actuel pour voir si ma chaîne est plus vieux que maintenant.
Pour l'utiliser:
De comparer que de la date avec l'année - mois - jour et sans temps pour moi a travaillé comme ceci:
Que de la rédaction de ce document, Swift supporte la comparaison des Dates avec tous les opérateurs de comparaison (c'est à dire
<
,<=
,==
,>=
, et>
). Vous pouvez également comparer facultatif Dates, mais sont limités à<
,==
, et>
. Si vous avez besoin de comparer les deux options de dates à l'aide de<=
ou>=
, c'est à direVous pouvez surcharger le
<=
et>=
opérateurs à soutenir les options:Une autre façon de faire:
Swift 5:
1) Si vous utilisez le type de Date:
2) Si vous utilisez le type de Chaîne:
Je ne sais pas ou la deuxième option fonctionne à 100%. Mais combien n'aurais-je pas modifier les valeurs de firstStringDate et secondStringDate le résultat était correct.