Pull-to-refresh modifica el valor de la matriz?

Estoy trabajando en un pull-to-refresh en iOS con Swift.
Tengo una matriz con nombres de ciudades, cityNames = ["Chicago", "New York City"]
Implementé un pull-to-refresh para get datos de temperatura de internet. Así que cada vez que active el pull-to-refresh, irá a internet y obtendrá la temperatura de cada ciudad en el array cityNames .
Aquí está el código de pull-to-refresh

 var weatherDetail = [Weather]() // Pull to refresh func refreshData() { var cityNames = [String]() for (index, _) in weatherDetail.enumerate() { let info = weatherDetail[index] cityNames.append(info.cityName) } print(cityNames) weatherDetail.removeAll() for city in cityNames { self.forwardGeocoding(city) } weatherCityTable.reloadData() refreshControl.endRefreshing() } 

En el código anterior, weatherDetail es una matriz de models (no estoy seguro de cómo express esto, pero Weather es un model que contiene nombres de ciudades, temperatura, time de subida del sol, temperatura alta / baja.
forwardGeocoding es una function que obtiene la coordinación geográfica para una ciudad y luego envía una request para get los datos meteorológicos de esa ciudad.
El pull-to-refresh funciona, el problema con el que me encuentro es, durante las primeras 2,3 veces cuando lo jalo, funciona sin problemas. Pero a medida que tiro más veces, la matriz cambiará repentinamente a cityNames = ["Chicago", "Chicago"]
Gracias por su ayuda, avíseme si necesita más información.
ACTUALIZAR:
weatherDetail.removeAll() , bash simplemente anexar los mismos datos a la matriz. Después de la actualización, imprime "Chicago", "New York City", "Chicago", "Chicago" . Si lo refresco más veces, imprime algo como "Chicago", "New York City", "Chicago", "Chicago", "Chicago", "Chicago"

¿Es sincrónica la encoding de reenvío? ¿Cuándo se establece / actualiza WeatherDetail?

Me parece que tienes algún tipo de problema de sincronicidad que ocurre aquí, probablemente exacerbado por la latencia.

El uso de enumerate() y append() para hacer esto no es un buen enfoque, hay una manera más elegante y sin errores para lograr esto:

 let cityNames:[String] = weatherDetail.map { weather -> String in weather.cityName } 

O solo escribe:

 let cityNames:[String] = weatherDetail.map { $0.cityName } 

Si los nombres de las ciudades se repiten dos veces, eso significa que la información en la matriz weatherDetail se repite dos veces. Intente imprimir weatherDetail antes de imprimir cityNames . Si weatherDetail se repite dos veces, debe ubicar el código que agrega dos veces los mismos objects Weather y eliminarlo.

Para propósitos de testing, busque cada lugar que modifique weatherDetail , y antes de esas declaraciones ponga weatherDetail.removeAll() . Si eso elimina su problema, busque el código que agrega información networkingundante a weatherDetail .