2016-07-28 103 views
0

我想通過NSDate找出數組的索引。通過NSDate查找數組的索引?

生病嘗試:

var sectionsInTable = [NSDate]() 

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

print(indexOfElement) 

但生病總是得到

怎麼可能從數組中得到一個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