Pull-to-refresh изменяет значение массива?
Я работаю над pull-to-refresh на iOS с помощью Swift.
У меня есть массив с названиями городов, cityNames = ["Chicago", "New York City"] 
Я реализовал функцию pull-to-refresh для получения данных о температуре из интернета.  Поэтому каждый раз, когда я запускаю pull-to-refresh, он будет выходить в интернет и получать температуру для каждого города в массиве cityNames.
Вот код для 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()
}
В приведенном выше коде weatherDetail - это массив модели(я не знаю, как это сформулировать, но Weather - это модель, которая содержит названия городов, температуру, время восхода солнца, высокую / низкую температуру.forwardGeocoding это функция, которая получает географическую координацию для города, а затем отправляет запрос на получение данных о погоде для этого города.
Тяга к обновлению работает, проблема, с которой я сталкиваюсь, заключается в том, что в первые 2,3 раза, когда я тяну, она работает без проблем.  Но как только я потяну больше раз, массив внезапно изменится на cityNames = ["Chicago", "Chicago"] 
Спасибо за вашу помощь, пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Обновление: 
Я удалено weatherDetail.removeAll(), попробуйте просто добавить те же данные в массив. После обновления он распечатывает "Chicago", "New York City", "Chicago", "Chicago". Если я обновлю его еще раз, он выведет что-то вроде "Chicago", "New York City", "Chicago", "Chicago", "Chicago", "Chicago" 
3 ответа:
Является ли форвардгеокодирование синхронным? Когда weatherDetail устанавливается / обновляется?
Мне кажется, что у вас здесь какая-то проблема с синхронностью, вероятно, усугубленная задержкой.
Использование
enumerate()иappend()для этого не является хорошим подходом ,есть более элегантный и безошибочный способ достичь этого:let cityNames:[String] = weatherDetail.map { weather -> String in weather.cityName }Или просто напишите:
let cityNames:[String] = weatherDetail.map { $0.cityName }
Если названия городов повторяются дважды, это означает, что информация в массиве
weatherDetailтакже повторяется дважды. Попробуйте напечататьweatherDetailперед печатьюcityNames. ЕслиweatherDetailповторяется дважды, то следует найти код, который дважды добавляет одни и те же объектыWeather, и исключить его.Для целей тестирования найдите каждое место, которое изменяет
weatherDetail, и перед этими утверждениями поместитеweatherDetail.removeAll(). Если это устраняет вашу проблему, то найдите код, который добавляет избыточную информацию вweatherDetail.