Я обновляю свое приложение до синтаксиса Swift 3.0 (я знаю, что оно все еще находится в стадии бета-тестирования, но хочу быть готовым, как только оно будет выпущено).
До предыдущей бета-версии Xcode (Beta 5) я мог сравнивать два Date
объекта, используя операнды <
, >
и ==
. Но в последней бета-версии (Beta 6) это больше не работает. Вот несколько скриншотов:
Как вы можете видеть на обоих скриншотах, это два Date
объекта. Но я получаю следующую ошибку:
Что я делаю не так? Функции все еще объявлены в Date
классе:
static func >(Date, Date)
Возвращает истину, если дата слева позже по времени, чем дата справа.
Это просто ошибка бета-версии или я что-то делаю не так?
let d1 = Date() ; let d2 = Date() ; if d1 > d2 { }
работает в моем Xcode 8 beta 6.Ответы:
Я пробовал этот фрагмент (в Xcode 8 Beta 6), и он работает нормально.
источник
2019-05-14 12:08:14 +0000
==2019-05-14
должен возвращать истину. тогда что ?Date
естьComparable
&Equatable
(начиная с Swift 3)Этот ответ дополняет ответ @Ankit Thakur.
Так как Swift 3,
Date
структура (на основе базовогоNSDate
класса) принимает сииComparable
иEquatable
протоколы.Comparable
требует , чтобыDate
реализовать операторы:<
,<=
,>
,>=
.Equatable
требует, чтобыDate
реализовать==
оператор.Equatable
позволяетDate
использовать реализацию!=
оператора по умолчанию (которая является обратной реализацииEquatable
==
оператора).В следующем примере кода используются эти операторы сравнения и подтверждается, какие сравнения верны с
print
операторами.Функция сравнения
Образец использования
источник
из Swift 3 и выше Date is Comparable, поэтому мы можем напрямую сравнивать даты, например
В качестве альтернативы мы можем создать расширение на дату
Использование:
let isEqual = date1.isEqualTo(date2)
источник
2019-05-14 12:08:14 +0000
==2019-05-14
должен возвращать истину. тогда что ?Посмотрите это http://iswift.org/cookbook/compare-2-dates
Получить даты:
Использование инструкции SWITCH
с использованием оператора IF
источник
Для меня проблема заключалась в том, что у меня было собственное расширение класса Date, которое определяло все операторы сравнения. Теперь (начиная с swift 3), что Date сопоставима, эти расширения не нужны. Я прокомментировал их, и это сработало.
источник
SWIFT 3: Не знаю, ищете ли вы это. Но я сравниваю строку с текущей меткой времени, чтобы узнать, старше ли моя строка.
Чтобы использовать это:
источник
Чтобы сравнить дату только с годом - месяцем - днем и без времени, у меня получалось так:
источник
Например, если вы хотите игнорировать секунды, вы можете использовать
func isDate (Date, equalTo: Date, toUnitGranularity: NSCalendar.Unit) -> Bool
Пример сравнения, если это тот же день:
источник
По состоянию на момент написания этой статьи, Swift изначально поддерживает сравнение дат со всеми операторами сравнения (т.е.
<
,<=
,==
,>=
, и>
). Вы можете также сравнить дополнительные даты , но ограничены<
,==
и>
. Если вам нужно сравнить две необязательные даты с помощью<=
или>=
, т.е.Вы можете перегрузить
<=
и>=
оператор поддержки дополнительных опции:источник
источник
Другой способ сделать это:
источник
источник
Swift 5:
1) Если вы используете тип даты:
2) Если вы используете тип String:
Не уверен или второй вариант работает на все 100%. Но сколько бы я не изменил значения firstStringDate и secondStringDate, результат был правильным.
источник
в Swift 3,4 вы должны использовать «Сравнить». например:
источник