【发布时间】:2021-01-23 20:49:52
【问题描述】:
我正在尝试使用 DispatchGroup 从多个请求中获取数据。 我不明白为什么 print(weatherData.fact.pressureMm!) 正在工作,但数据没有附加到 dataArray 和 print(dataArray?[0].fact.pressureMm ?? "nil") print nil.
我也在尝试从 complitionHandeler 打印数据,结果是一样的。
如何在数组中附加 weatherData 并正确地从编译中获取值?
func fetchWeatherForCities (complitionHandeler: @escaping([YandexWeatherData]?)->Void) {
var dataArray: [YandexWeatherData]?
let group = DispatchGroup()
for city in cities {
group.enter()
DispatchQueue.global().async {
var urlString = self.urlString
self.locationManager.getCoordinate(forCity: city) { (coordinate) in
urlString += self.latitudeField + coordinate.latitude
urlString += self.longitudeField + coordinate.longitude
guard let url = URL(string: urlString) else {return}
var request = URLRequest(url: url)
request.addValue(self.apiKey, forHTTPHeaderField: self.apiField)
let dataTask = URLSession.shared.dataTask(with: request) { (data, response, error) in
if let error = error {
print(error)
}
if let data = data {
guard let weatherData = self.parseJSON(withData: data) else {return}
print(weatherData.fact.pressureMm!)
dataArray?.append(weatherData)
print(dataArray?[0].fact.pressureMm ?? "nil")
group.leave()
}
}
dataTask.resume()
}
}
}
group.notify(queue: DispatchQueue.global()) {
complitionHandeler(dataArray)
}
}
【问题讨论】:
-
什么是
parseJSON
?您有太多 unmanaged 退出,其中没有留下group
。dataArray
已声明但没有任何价值。为什么它是可选的? -
您错误地使用了 DispatchGroup。
-
@vadian 在我将空值设置为数组后它开始工作。
-
@matt 你能解释一下如何使它正确吗?
标签: swift grand-central-dispatch dispatchgroup