2016-07-28 65 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