Saya memperbarui aplikasi saya ke sintaks Swift 3.0 (saya tahu ini masih dalam versi beta tetapi saya ingin bersiap segera setelah dirilis).
Hingga Beta Xcode sebelumnya (Beta 5) saya dapat membandingkan dua Date
objek menggunakan operan <
, >
dan ==
. Tetapi dalam versi beta terbaru (Beta 6) ini tidak berfungsi lagi. Berikut beberapa tangkapan layarnya:
Seperti yang Anda lihat di kedua tangkapan layar, ini adalah dua Date
objek. Tetapi saya mendapatkan kesalahan berikut:
Apa yang saya lakukan salah? Fungsinya masih dideklarasikan di Date
kelas:
static func >(Date, Date)
Mengembalikan nilai benar jika Tanggal di sisi kiri lebih lambat dari Tanggal di sisi kanan.
Apakah ini hanya bug Beta atau apakah saya melakukan sesuatu yang salah?
let d1 = Date() ; let d2 = Date() ; if d1 > d2 { }
bekerja di Xcode 8 beta 6.Jawaban:
Saya telah mencoba potongan ini (di Xcode 8 Beta 6), dan berfungsi dengan baik.
sumber
2019-05-14 12:08:14 +0000
==2019-05-14
harus mengembalikan nilai true. lalu apa ?Date
adalahComparable
&Equatable
(pada Swift 3)Jawaban ini melengkapi jawaban @Ankit Thakur.
Sejak Swift 3,
Date
struct (berdasarkanNSDate
kelas yang mendasarinya ) mengadopsi protokolComparable
danEquatable
.Comparable
membutuhkan yangDate
menerapkan operator:<
,<=
,>
,>=
.Equatable
mensyaratkan bahwaDate
mengimplementasikan==
operator.Equatable
memungkinkanDate
untuk menggunakan implementasi default dari!=
operator (yang merupakan kebalikan dariEquatable
==
implementasi operator).Kode contoh berikut melatih operator perbandingan ini dan mengonfirmasi perbandingan mana yang benar dengan
print
pernyataan.Fungsi perbandingan
Penggunaan Sampel
sumber
dari Swift 3 ke atas, Date is Comparable sehingga kita bisa langsung membandingkan tanggal seperti itu
Atau Kami dapat membuat ekstensi pada Tanggal
Menggunakan:
let isEqual = date1.isEqualTo(date2)
sumber
2019-05-14 12:08:14 +0000
==2019-05-14
harus mengembalikan nilai true. lalu apa ?Lihat http://iswift.org/cookbook/compare-2-dates ini
Dapatkan Tanggal:
Menggunakan Pernyataan SWITCH
menggunakan Pernyataan IF
sumber
Bagi saya masalahnya adalah saya memiliki ekstensi saya sendiri untuk kelas Date yang mendefinisikan semua operator pembanding. Sekarang (sejak swift 3) Tanggal itu sebanding, ekstensi ini tidak diperlukan. Jadi saya berkomentar dan berhasil.
sumber
SWIFT 3: Tidak tahu apakah ini yang Anda cari. Tapi saya membandingkan string dengan stempel waktu saat ini untuk melihat apakah string saya lebih tua dari sekarang.
Untuk menggunakannya:
sumber
Untuk membandingkan tanggal hanya dengan tahun - bulan - hari dan tanpa waktu bagi saya bekerja seperti ini:
sumber
Jika Anda ingin mengabaikan detik misalnya, Anda dapat menggunakan
func isDate (Date, equalTo: Date, toUnitGranularity: NSCalendar.Unit) -> Bool
Contoh bandingkan jika itu hari yang sama:
sumber
Pada saat penulisan ini, Swift dukungan native membandingkan Tanggal dengan semua operator perbandingan (yaitu
<
,<=
,==
,>=
, dan>
). Anda juga dapat membandingkan Tanggal opsional tetapi terbatas pada<
,==
, dan>
. Jika Anda perlu membandingkan dua tanggal opsional menggunakan<=
atau>=
, yaituAnda dapat membebani operator
<=
dan>=
untuk mendukung pilihan:sumber
sumber
Cara lain untuk melakukannya:
sumber
sumber
Cepat 5:
1) Jika Anda menggunakan tipe Tanggal:
2) Jika Anda menggunakan tipe String:
Saya tidak yakin atau opsi kedua berfungsi pada 100%. Tapi berapa banyak saya tidak akan mengubah nilai firstStringDate dan secondStringDate hasilnya benar.
sumber
di Swift 3,4 Anda harus menggunakan "Bandingkan". sebagai contoh:
sumber