2016-11-22 5 views
1

Swift2でJSONを解析するための独自の関数を書きました。 JSONが解析されると、JSONから取得されたデータのリストがアプリのtableViewに表示されます。このデータをアルファベット順に表示する方法を理解しようとしています。私はこれが関数を呼び出すappendメソッドの前のどこかで発生する必要があると思います。私はこれがsort関数である必要があると思いますが、これを適切に実行するSwift2で正しいソート関数を見つけ出すことができませんでした。私が得ることができるどんな助けもありがとう!swift: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'は、スウィフトに無用である – vadian

答えて

1

あなたは、すべてのオブジェクトがArrayappendforループの後を意味した後、あなたの配列をsortする必要があります。 はここに私のparseJSON機能です。

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 } 

編集:それはあなたのUIをブロックするので、このようなNSURLSessionを使用するように打者ますのでNSData(contentsOfURL:)を使用していない提案として@vadian。

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

を。テーブルビューをリロードしますか?私は自分のviewDidLoad()に入れてみましたが、エラーが出てきました: "メンバー 'tableView'へのあいまいな参照を自分自身で – user7077886

+0

@ user7077886編集した答えをチェックしてください。また、' self.tableView'はあなたのあなたがテーブルビューアウトレット名でそれを変更する必要があります。 –

関連する問題