2015-01-22 2 views
0

Я сделал UITableview с NSMutableArray, имея данные, загруженные с сервера в виде JSON. Когда я выполняю ячейку таблицы, код выглядит следующим образом.Как вы сортируете NSMutableArray от JSON в swift?

if let rstrntName = self.items[indexPath.row]["rstrnt_name"] as? NSString { 
    cell.rstrntName.text = rstrntName 
} 

Теперь я хочу отсортировать его по столбцу с именем «rstrnt_name». Ниже приведен код, который я пробовал, но он не работает.

self.items.sortedArrayUsingComparator({obj1, obj2 -> NSComparisonResult in 
    let rstrnt1: NSDictionary = obj1 as NSDictionary 
    let rstrnt2: NSDictionary = obj2 as NSDictionary 
    if (rstrnt1["rstrnt_name"] as String) < (rstrnt2["rstrnt_name"] as String) { 
     return NSComparisonResult.OrderedAscending 
    } 
    if (rstrnt1["rstrnt_name"] as String) > (rstrnt2["rstrnt_name"] as String) { 
     return NSComparisonResult.OrderedDescending 
    } 
    return NSComparisonResult.OrderedSame 
}) 

Как я могу сортировать объекты в этом типе?

+0

Btw, если вы можете использовать быстрые массивы, подход более приятный и пример здесь (поиск на странице для сортировки): https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language /Closures.html – Lee

+0

Не могли бы вы отправить код из области, где вы добавили элементы в массив self.items? – zinnuree

ответ

1

Назначают отсортированный массив в любом месте и проверить -

self.items = self.items.sortedArrayUsingComparator(//rest of your code 

должно дать вам отсортированный результат.

+0

Спасибо. Я изменил тип на NSArray, а затем обработчик. – user3653575

1

self.items.sortedArrayUsingComparator возвращает отсортированный массив, который вы, кажется, выбрасываете в эфир. Попробуйте сохранить значение вместо этого.

1

Здесь находится swift Array Тип сортировки методом сопоставления с образцом. Этот метод sort непосредственно мутирует items не возвращает новый.

var items: [[String: AnyObject]] = [["rstrnt_name": "mustafa"], ["rstrnt_name": "Ray"], ["rstrnt_name": "Ali"]] 

items.sort { (left, right) -> Bool in 
    let first = left["rstrnt_name"] as? String 
    let second = right["rstrnt_name"] as? String 

    switch (first, second) { 
    case let (.Some(x), .Some(y)): return x < y 
    default: return false 
    } 
} 
Смежные вопросы