2016-07-28 5 views
0

NSDateで配列のインデックスを調べたいと思います。配列のインデックスをNSDateで検索しますか?

病気は試してみました:

var sectionsInTable = [NSDate]() 

let indexOfElement = sectionsInTable.indexOf(date) // where date is an NSDate in my sectionsInTable Array 

print(indexOfElement) 

しかし、病気常にfalse

を得る方法は、アレイからNSDateのインデックスを取得することは可能でしょうか?

ありがとうございます。

+0

空になるように初期化したのであれば、なぜ 'sectionsInTable'で日付を見つけるのでしょうか? – WMios

+0

これは単なる例です。まだその配列にNSDate()が格納されています。 – derdida

+0

NSDateオブジェクトは「正確」です。正確に 'sectionsInTables'を含むものは何ですか? NSDateオブジェクトと同じ日、同じ時間に同じ日付が欲しいですか? 'indexOfObjectPassingTest:'と 'isDate:equalToDate:toUnitGranularity:'を使うことができます。 – Larme

答えて

1

あなたがNSDateオブジェクトの正確なコピーを持っている場合は、あなたのコードは動作するはずです:

let date = NSDate() 
let date2 = date.copy() as! NSDate 
var sectionsInTable: [NSDate] = [date] 

let indexOfElement = sectionsInTable.indexOf(date2) 
print(indexOfElement) 
//prints: Optional(0) 
+1

ありがとう - 私はここにタイムゾーンの問題があることを発見した、最初にそれを修正し、後でそれを試す必要があります。 – derdida

0

比較は日付の時間のものとどのくらい深く行きたいかによって決まります。私はあなたの日付配列をループし、それが等しいかどうか比較し、そのインデックスを返すべきだと思います。

1

あなたのアプローチは、正常に動作する必要があります。このコードは2のインデックスを生成します。

let s = 31536000.0 // Seconds per Year 
var tbl = [NSDate]() 
tbl.append(NSDate(timeIntervalSince1970: 40*s)) // 0 
tbl.append(NSDate(timeIntervalSince1970: 41*s)) // 1 
tbl.append(NSDate(timeIntervalSince1970: 42*s)) // 2 
tbl.append(NSDate(timeIntervalSince1970: 43*s)) // 3 

let date = NSDate(timeIntervalSince1970: 42*s) 
let indexOfElement = tbl.indexOf(date) 

あなたが適切なインデックスを取得されていません最も可能性が高い理由は、検索NSDateが配列にNSDateオブジェクトの時間コンポーネントと一致していない時間コンポーネントを持っていることです。このような場合は、両方のオブジェクトを印刷し、時間コンポーネントを確認することで確認できます。

+0

あなたの答えをありがとう。ライブラリが別のタイムゾーンを返すことが既に分かっています - したがって、私の日付は同じではありません。最初にそれを修正して試してみる必要がありますが、あなたの例ではそれがうまくいくと信じています。 – derdida

関連する問題