2015-05-23 2 views
0

Моя проблема заключается в том, что я не могу сортировать один из своих массивов в swift по дате. Массив заполняется AnyObjects. Это в настоящее время мой код для сортировки массива:Ошибка сортировки строки при сортировке по дате

sort(postsArray, {(NSDateFormatter($0 as AnyObject?).valueForKey("date")!).timeIntervalSinceNow > (NSDateFormatter($1 as AnyObject?).valueForKey("date")!).timeIntervalSinceNow}) 

Этот код работает, когда я жёстко его, чтобы найти значение даты первого элемента, но не работает в процессе сортировки. Ошибка, которую он мне дает, - «фатальная ошибка: неожиданно найденный nil при развертывании необязательного значения». Любая помощь будет оценена по достоинству.

+0

проверить этот ответ HTTP: // stackoverflow.com/a/28359250/2108547 –

ответ

2

Если ваш массив заполнен AnyObjects, вам необходимо передать AnyObject в NSDate, чтобы отсортировать его. Вы можете использовать метод NSDate сравнения() следующим образом:

let date1 = NSDate().dateByAddingTimeInterval(1000) 
let date2 = NSDate().dateByAddingTimeInterval(-1000) 
let date3 = NSDate() 

let postsArray:[AnyObject] = [date1,date2,date3] 

let postsSorted = postsArray.sorted{($0 as! NSDate).compare($1 as! NSDate) == .OrderedAscending} 

postsSorted // ["May 23, 2015, 7:35 PM", "May 23, 2015, 7:51 PM", "May 23, 2015, 8:08 PM"] 

Если массив содержит строки, вы можете создать расширение для преобразования его в NSDate следующим образом:

extension String{ 
    var toDate:NSDate { 
     let df = NSDateFormatter() 
     df.dateFormat = "EEE, dd MMM yyyy HH:mm:SS zzz" 
     return df.dateFromString(self)! 
    } 
} 


let postsArray:[AnyObject] = ["Wed, 27 May 2015 15:12:09 EDT","Fri, 22 May 2015 15:12:09 EDT","Tue, 19 May 2015 15:12:09 EDT"] 

postsArray[0] as! String 

let postsSorted = postsArray.sorted { ($0 as! String).toDate.compare(($1 as! String).toDate) == .OrderedAscending} 

postsSorted // "Tue, 19 May 2015 15:12:09 EDT", "Fri, 22 May 2015 15:12:09 EDT", "Wed, 27 May 2015 15:12:09 EDT"] 
+0

нет его заполнены объектами, которые относятся к классу любого объекта – Maglor

+0

Я спросил, все ли объекты Даты, как бы вы сортировали не даты? –

+0

все объекты содержат свойство, называемое датой, со строкой, отформатированной как «Sat, 23 мая 2015 года 15:12:09 EDT». вот почему я иду valueForKey («даты») – Maglor