2016-11-22 3 views
1

Я написал свою собственную функцию в Swift2 для разбора JSON. После анализа JSON список данных, которые были извлечены из JSON, отображается в tableView в моем приложении. Я пытаюсь выяснить, как отображать эти данные в алфавитном порядке. Я думаю, что это должно произойти где-то перед методом append, который я вызываю в функции. Я бы предположил, что это должна быть функция sort, но я не смог определить правильную функцию сортировки в Swift2, которая выполнит это правильно. Любая помощь, которую я могу получить, оценивается! Вот моя parseJSON функция:swift: данные Alphabetiz обрабатываются JSON

func parseJSON(){ 
    do{ 
     let data = NSData(contentsOfURL: NSURL(string: "https://jsonblob.com/api/jsonBlob/580d0ccce4b0bcac9f837fbe")!) 

     let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) 

     for anItem in jsonResult as! [Dictionary<String, AnyObject>]{ 

      let mifiName2 = anItem["name"] as! String 
      let mifiId = anItem["employeeId"] as! Int 

      let newName = Name(mifiName: mifiName2, mifiId: mifiId) 
      nameOfMifi.append(newName) 
      //print("Name: \(newName)") 

     } 
    } 
    catch let error as NSError{ 
     print(error.debugDescription) 
    } 
} 
+2

** Никогда ** загрузки данных с сервера с синхронным методом 'NSData (contentsOfURL:' и 'MutableContainers' бесполезен в Swift – vadian

ответ

1

Вы должны sort свой массив после того, как все объект append в Array означает, что после цикла for.

for anItem in jsonResult as! [Dictionary<String, AnyObject>]{ 

    let mifiName2 = anItem["name"] as! String 
    let mifiId = anItem["employeeId"] as! Int 

    let newName = Name(mifiName: mifiName2, mifiId: mifiId) 
    nameOfMifi.append(newName) 
    //print("Name: \(newName)") 
} 

//Now you need to sort your array on the basis of name like this 
nameOfMifi.sortInPlace { $0.mifiName < $1.mifiName } 

Edit: Как @vadian предложил не использовать NSData(contentsOfURL:), потому что он будет блокировать ваш пользовательский интерфейс, так что тесто использовать NSURLSession как это.

let session = NSURLSession.sharedSession() 
let url = NSURL(string: "https://jsonblob.com/api/jsonBlob/580d0ccce4b0bcac9f837fbe")! 
var task = session.dataTaskWithURL(url, completionHandler: { 
    (data, response, error) -> Void in 
    if error != nil { 
     return 
    } 

    if let jsonResult = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? [Dictionary<String, AnyObject>] { 

     for anItem in jsonResult { 

      let mifiName2 = anItem["name"] as! String 
      let mifiId = anItem["employeeId"] as! Int 

      let newName = Name(mifiName: mifiName2, mifiId: mifiId) 
      nameOfMifi.append(newName) 
      //print("Name: \(newName)") 
     } 
     //Now you need to sort your array on the basis of name like this 
     nameOfMifi.sortInPlace { $0.mifiName < $1.mifiName } 

     //Now reload tableView on main thread. 
     dispatch_async(dispatch_get_main_queue()) { 
      self.tableView.reloadData() 
     } 
    } 
}) 
task.resume() 
+0

Пожалуйста, проверьте отредактированный ответ один раз :) –

+0

где делает метод. перезагрузите tableView? Я попытался поместить его в свой viewDidLoad(), и я все время получаю сообщение об ошибке: «Неоднозначная ссылка на элемент tableView» на самом мире – user7077886

+0

@ user7077886 Проверьте отредактированный ответ. Также здесь 'self.tableView' - это ваш выход в tableView, который вы создали, вам нужно изменить его с помощью имени таблицы TableView. –

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