2017-12-06 3 views
0
func getOkToDownload(response:AcloseCarsToDownload?, error : Error?) -> Void { 

     if let response = response { 
      self.response = response 
      if response.status == "OK" { 
       if let carsDownloaded = response.cars { 
        var number = numberCars/(categories?.count)! 
        number = number == 0 ? 1 : number 

       let sortedArray = carsDownloaded.sorted { 
          distance(from: currentLocation!, to: $0.location!) < distance(from: currentLocation!, to: $1.location!) 
        } 


       /* let firstPlace = sortedArray.prefix(1) */ 




        cars.append(contentsOf: sortedArray.prefix(number)) 

      } 
       self.tableView?.reloadData() 
      } else { 
       let alert = UIAlertController.init(title: "Error", message: response.status, preferredStyle: .alert) 
       alert.addAction(UIAlertAction.init(title: "Cancel", style: .cancel, handler: nil)) 
       alert.addAction(UIAlertAction.init(title: "Retry", style: .default, handler: { (action) in 
        DispatchQueue.main.async { 
         self.loadPlaces(true) 

        } 
       })) 
       self.present(viewController: alert) 
       } 
      isLoading = false 
     } 
     else { 
      print("response is nil") 
     } 
    } 

この関数を使用して、サーバからダウンロードしたアイテムのリストを作成します。そして、私は配列が塗りつぶされた後にのみ配列する方法

let sortedArray = carsDownloaded.sorted { 
          distance(from: currentLocation!, to: $0.location!) < distance(from: currentLocation!, to: $1.location!) 
        } 

を追加することでそれを注文すると思ったが、この解決策の問題は、それが各呼び出しでリストをソートすることをされ、結果が希望ではありませんので、このリストは、最寄りから最も公平項目に順序付けられていることを望みます1つは、私は一度完了し、配列が満たされていることを望む、リストが注文されます。どのようにできるのか?

これは、私はあなたが応答の数をカウントし、カテゴリの数と比較し、だけにしてあなたのソート機能を実行する可能性がコメントで言ったように、私はコール

func loadCars(_ force:Bool) { 

     if !force { 
      if !canUpdate() { 
       return 
      } 
     } 

     if(force){ 
     print("load") 
     iUpdating = true 
     for category in categories! { 

      CloseCars.getCloseCars(by: category?.name ?? "berl", coordinates: currentLocation!, radius: radius, token: self.response?.nextPageToken, completion: getOkToDownload) 

     } 
    } 
} 
+0

1つの配列に対するすべての応答を収集し、要素の数がカテゴリの要素の数と等しいかどうかをチェックしてから並べ替え関数を使用できます。または、Rx –

+0

を使用して、コードで例を挙げてください。 – arc4Random

答えて

0

に使用FUNCです。私はコードをテストしていませんが、このようなものを試すことができます

+0

これはカテゴリ別にしか注文しないでしょうか?私の元の問題は私のコードでは最終的な配列はカテゴリーだけで注文されていますが、私はそれが欲しいわけではありません、メンバーシップのカテゴリに関係なくすべてのアイテムが最も近いものから順に注文されます – arc4Random

+0

配列はカテゴリに依存しません、あなたは応答から得たすべての車を並べ替えます –

+0

私は試しましたが動作しません – arc4Random

関連する問題