2017-12-18 3 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") 
     } 
    } 

"상수 '하자'입니다). 어떻게 해결할 수 있습니까?

+0

[루프의 로컬 변수를 가변 변수로 변환] 가능한 복제본 (https://stackoverflow.com/questions/25793460/turn-for-in-loops-local-variables-into-mutable-variables) – the4kman

+0

도움!! – fisherM

+0

@ the4kman이 트릭은 swift4에서 더 이상 작동하지 않습니다. – dasblinkenlight

답변

1

당신은 범위 루프를 수행 한 후 변경 가능한 개체를 얻을 인덱스 categories에 액세스 할 수 있습니다 :

guard let categories = categories else { 
    //Handle a nil categories array here 
    return 
} 
을 :

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

가 나는 또한 주위 categories 경비에 의해 힘의 사용을 펼쳤다 피하는 것이 좋습니다를

관련 문제