2017-09-03 11 views
0

2つの日付が少なくとも1時間離れているかどうかを確認しようとしています。Swiftの条件付き日付間隔を使用

if Calendar.current.dateComponents([.hour], from: jsqMessage.date, to: lastMessage.date) > 1 { 

ただし、2進演算子はDateComponents型のオペランドには使用できません。どのように私の目標を達成するための任意のアイデア?

答えて

2

メソッドdateComponentsは数値を返すのではなく、新しいDateComponentsオブジェクトを返します。 2つの日付間の時間数を取得するには、.hourを追加する必要があります。 .hourはタイプInt?を返すので、それをアンラップする必要があります。

だからあなたのコードは、あなたが本当に比較のこれらのタイプを処理する場合は、DateComponentsInt上のいずれかの拡張子を書くことができ

if Calendar.current.dateComponents([.hour], from: jsqMessage.date, to: lastMessage.date).hour! >= 1 { 
    // Your code 
} 
+0

ありがとう。最初はうまくいきませんでしたが、私はfrom/toを逆にしていたからです。 – Sente

1

ようなものになるだろう。それ以外の場合は、コンポーネント自体(この場合はhour)を比較する必要があります。

if let hours = Calendar.current.dateComponents([.hour], from: jsqMessage.date, to: lastMessage.date).hour, 
    hours > 1 { 

    // Something 
} 

// OR 

if Calendar.current.dateComponents([.hour], from: jsqMessage.date, to: lastMessage.date).hour! > 1 { 

    // Something 
} 
+0

この場合、 'hours'は' nil'にはならないので、オプションのバインドは役に立たなくなります。 – vadian

+0

技術的には、私はまだアンラップを強制したくないです。 – nathan

+1

黒と白以上のものがあります(強制アンラッピングはそれほど悪くないと言いたい)。 'hour'コンポーネントを明示的に指定すると、100%保証され、' hour'は値を持ちます。 – vadian