2017-12-18 5 views
-1

私は呼び出しを処理するために使用する関数でサイクルを作成しようとしていますが、 「アイテムは、」私は今var number = numberCars/(categories?.count)!仕事だけ以来のカテゴリー(へnumberCars/(categories?.count)!の残りの部分を割り当てるサイクルを作成しようとしている間は休みがない場合、この行item.element?.availability = quotient + (item.offset < remainder ? 1 : 0)プロパティに割り当てることができません: 'item'は 'let'定数です(Swift 4)

func didReceiveResponse(response:NearbyCars?, error : Error?) -> Void { 
     dount += 1 
     if let error = error { 
      let alertController = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: .alert) 
      let actionDismiss = UIAlertAction(title: "Dismiss", style: .cancel, handler: nil) 
      let actionRetry = UIAlertAction(title: "Retry", style: .default, handler: { (action) in 
       DispatchQueue.main.async { 
        self.loadPlaces(true) 

       } 
      }) 
      alertController.addAction(actionRetry) 
      alertController.addAction(actionDismiss) 
      DispatchQueue.main.async { 
       self.present(viewController: alertController) 

      } 
     } 
     if let response = response { 

     self.response = response 
     if response.status == "OK" { 
      if let carsDownloaded = response.cars { 
       var number = numberCars/(categories?.count)! 
       let quotient = numberCars/(categories?.count)! 
       let remainder = numberCars % (categories?.count)! 

       for item in (categories?.enumerated())! { 
        item.element?.availability = quotient + (item.offset < remainder ? 1 : 0) 
       }  // HERE THE ERROR 



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

     if dount == numberCars { return } 
     sortedArray = cars.sorted { 
      distance(from: currentLocation!, to: $0.location!) < distance(from: currentLocation!, to: $1.location!) 

     } 
    } 


      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") 
     } 
    } 

「定数「しましょう」です)。どうすれば修正できますか?あなたは範囲をループを行い、その後、変更可能なオブジェクトを取得するためにインデックスでcategoriesにアクセスすることができ

+0

[ループ内のローカル変数を可変変数に変換]の可能な複製(https://stackoverflow.com/questions/25793460/turn-for-in-loops-local-variables-into-mutable-variables) – the4kman

+0

これはありません助けて!! – fisherM

+0

@ the4kmanこのトリックはswift4では動作しなくなりました。 – dasblinkenlight

答えて

1

for i in 0..<(categories?.count)! { 
    var item = categories[i] 
    item.element?.availability = quotient + (item.offset < remainder ? 1 : 0) 
} 

を私はまた、力の使用を避けることをお勧めしcategories周りを守ることにより、アンラップ:

guard let categories = categories else { 
    //Handle a nil categories array here 
    return 
} 
関連する問題