Estou atualizando meu aplicativo para a sintaxe Swift 3.0 (sei que ainda está em beta, mas quero estar preparado assim que for lançado).
Até o Beta anterior do Xcode (Beta 5) eu era capaz de comparar dois Date
objetos usando os operandos <
, >
e ==
. Mas no beta mais recente (beta 6) isso não está mais funcionando. Aqui estão algumas capturas de tela:
Como você pode ver nas duas imagens, são dois Date
objetos. Mas recebo o seguinte erro:
O que estou fazendo de errado? As funções ainda são declaradas na Date
classe:
static func >(Date, Date)
Retorna verdadeiro se a data à esquerda for posterior no tempo do que a data à direita.
Este é apenas um bug Beta ou estou fazendo algo errado?
let d1 = Date() ; let d2 = Date() ; if d1 > d2 { }
funciona no meu Xcode 8 beta 6.Respostas:
Eu tentei este snippet (no Xcode 8 Beta 6) e está funcionando bem.
fonte
2019-05-14 12:08:14 +0000
==2019-05-14
deve retornar verdadeiro. então o que ?Date
éComparable
&Equatable
(a partir do Swift 3)Esta resposta complementa a resposta de @Ankit Thakur.
Desde o Swift 3, a
Date
estrutura (com base naNSDate
classe subjacente ) adota os protocolosComparable
eEquatable
.Comparable
exige queDate
implementar os operadores:<
,<=
,>
,>=
.Equatable
requer queDate
implemente o==
operador.Equatable
permiteDate
usar a implementação padrão do!=
operador (que é o inverso daEquatable
==
implementação do operador).O código de exemplo a seguir exercita esses operadores de comparação e confirma quais comparações são verdadeiras com as
print
instruções.Função de comparação
Uso de amostra
fonte
do Swift 3 e superior, a data é comparável para que possamos comparar diretamente datas como
Alternativamente, podemos criar extensão na data
Usar:
let isEqual = date1.isEqualTo(date2)
fonte
2019-05-14 12:08:14 +0000
==2019-05-14
deve retornar verdadeiro. então o que ?Olhe este http://iswift.org/cookbook/compare-2-dates
Obter datas:
Usando a instrução SWITCH
usando declaração IF
fonte
Para mim, o problema era que eu tinha minha própria extensão para a classe Date que definia todos os operadores de comparação. Agora (desde o swift 3) essa data é comparável, essas extensões não são necessárias. Então, eu comentei e funcionou.
fonte
SWIFT 3: Não sei se é isso que você está procurando. Mas comparo uma string a um carimbo de data / hora atual para ver se minha string é mais antiga que agora.
Para usá-lo:
fonte
Para comparar a data apenas com ano - mês - dia e sem tempo para mim funcionava assim:
fonte
Se você quiser ignorar os segundos, por exemplo, você pode usar
func isDate (Date, equalTo: Date, toUnitGranularity: NSCalendar.Unit) -> Bool
Exemplo compare se for o mesmo dia:
fonte
A partir do momento em que escrevo, Swift nativamente suporta comparando datas com todos os operadores de comparação (ou seja
<
,<=
,==
,>=
, e>
). Você também pode comparar datas opcionais, mas estão limitados a<
,==
, e>
. Se você precisar comparar duas datas opcionais usando<=
ou>=
, ou seja,Você pode sobrecarregar os operadores
<=
e>=
para oferecer suporte a opcionais:fonte
fonte
Outra maneira de fazer isso:
fonte
fonte
Swift 5:
1) Se você usar o tipo de data:
2) Se você usar o tipo String:
Não tenho certeza ou a segunda opção funciona a 100%. Mas por quanto eu não mudaria os valores de firstStringDate e secondStringDate se o resultado estivesse correto.
fonte
no Swift 3,4 você deve usar "Comparar". por exemplo:
fonte