Ich aktualisiere meine App auf die Swift 3.0-Syntax (ich weiß, dass sie sich noch in der Beta befindet, aber ich möchte darauf vorbereitet sein, sobald sie veröffentlicht wird).
Bis zur vorherige Beta von Xcode (Beta 5) konnte ich zwei vergleichen Date
Objekte mit den Operatoren <
, >
und ==
. In der neuesten Beta (Beta 6) funktioniert dies jedoch nicht mehr. Hier einige Screenshots:
Wie Sie in beiden Screenshots sehen können, sind dies zwei Date
Objekte. Aber ich bekomme folgenden Fehler:
Was mache ich falsch? Die Funktionen sind weiterhin in der Date
Klasse deklariert :
static func >(Date, Date)
Gibt true zurück, wenn das Datum auf der linken Seite später als das Datum auf der rechten Seite liegt.
Ist das nur ein Beta-Fehler oder mache ich etwas falsch?
let d1 = Date() ; let d2 = Date() ; if d1 > d2 { }
funktioniert in meinem Xcode 8 Beta 6.Antworten:
Ich habe dieses Snippet (in Xcode 8 Beta 6) ausprobiert und es funktioniert einwandfrei.
quelle
2019-05-14 12:08:14 +0000
==2019-05-14
sollte true zurückgeben. dann was ?Date
istComparable
&Equatable
(ab Swift 3)Diese Antwort ergänzt die Antwort von @Ankit Thakur.
Seit Swift 3 übernimmt die
Date
Struktur (basierend auf der zugrunde liegendenNSDate
Klasse) die ProtokolleComparable
undEquatable
.Comparable
das erfordertDate
implementieren die Betreiber:<
,<=
,>
,>=
.Equatable
erfordert, dassDate
der==
Operator implementiert .Equatable
ErmöglichtDate
die Verwendung der Standardimplementierung des!=
Operators (die Umkehrung derEquatable
==
Operatorimplementierung).Der folgende Beispielcode übt diese Vergleichsoperatoren aus und bestätigt, welche Vergleiche mit
print
Anweisungen wahr sind .Vergleichsfunktion
Beispielgebrauch
quelle
Ab Swift 3 und höher ist Datum vergleichbar, sodass wir Daten wie vergleichen können
Alternativ können wir eine Erweiterung am Datum erstellen
Verwenden:
let isEqual = date1.isEqualTo(date2)
quelle
2019-05-14 12:08:14 +0000
==2019-05-14
sollte true zurückgeben. dann was ?Schauen Sie sich diese http://iswift.org/cookbook/compare-2-dates an
Termine abrufen:
Verwenden der SWITCH-Anweisung
mit IF-Anweisung
quelle
Für mich war das Problem, dass ich eine eigene Erweiterung der Date-Klasse hatte, die alle Vergleichsoperatoren definierte. Jetzt (seit Swift 3) ist das Datum vergleichbar, diese Erweiterungen werden nicht benötigt. Also habe ich sie auskommentiert und es hat funktioniert.
quelle
SWIFT 3: Ich weiß nicht, ob Sie danach suchen. Aber ich vergleiche eine Zeichenfolge mit einem aktuellen Zeitstempel, um festzustellen, ob meine Zeichenfolge jetzt älter ist.
Um es zu benutzen:
quelle
Das Datum nur mit Jahr - Monat - Tag und ohne Zeit zu vergleichen, hat für mich so funktioniert:
quelle
Wenn Sie beispielsweise Sekunden ignorieren möchten, können Sie verwenden
func isDate (Date, sameTo: Date, toUnitGranularity: NSCalendar.Unit) -> Bool
Beispiel vergleichen, wenn es am selben Tag ist:
quelle
Ab dem Zeitpunkt des Schreibens dieses Artikels, zu vergleichen Swift nativ unterstützt Termine mit allen Vergleichsoperatoren (dh
<
,<=
,==
,>=
, und>
). Sie können auch optionale Daten vergleichen , sondern beschränken sich auf<
,==
und>
. Wenn Sie zwei optionale Daten mit<=
oder vergleichen müssen>=
, zSie können die Operatoren
<=
und überladen>=
, um Optionen zu unterstützen:quelle
quelle
Ein anderer Weg, es zu tun:
quelle
quelle
Swift 5:
1) Wenn Sie den Datumstyp verwenden:
2) Wenn Sie einen String-Typ verwenden:
Ich bin nicht sicher oder die zweite Option funktioniert zu 100%. Aber wie sehr würde ich die Werte von firstStringDate und secondStringDate nicht ändern, das Ergebnis war korrekt.
quelle
In Swift 3,4 sollten Sie "Vergleichen" verwenden. beispielsweise:
quelle