2016-07-28 2 views
0

Я хотел бы узнать индекс массива NSDate.Найти указатель массива NSDate?

Ill попробовал:

var sectionsInTable = [NSDate]() 

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

print(indexOfElement) 

Но больной всегда получают ложные

Как можно получить индекс в NSDate из массива?

Заранее спасибо.

+0

Почему вы ожидаете найти дату в 'sectionInTable', если вы ее инициализировали пустым? – WMios

+0

Это, к примеру. В этом массиве все еще есть NSDate(). – derdida

+0

Объект 'NSDate' является« точным ». Что содержит «разделыInTables»? 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

Смежные вопросы