Один из способов решить эту проблему - использовать закрытие. Чтобы упростить задачу, создайте структуру, содержащую значения
struct BikeResponse {
let status: String
let freeBikes: Int
let emptySlots: Int
}
, а затем измените объявление функции на
func getBikeData(stationName:String, completion: (BikeResponse)->(Void)){
, а затем после декодирования вы вызовете обработчик завершения
if let station = model.network.stations.first(where: { $0.name == stationName }) {
let response = BikeResponse(status: station.extra.status,
freeBikes: station.free_bikes,
emptySlots: station.empty_slots)
completion(response)
А затем в коде завершения вы можете присвоить значения своим меткам
getBikeData(stationName: "ABC") { response in
DispatchQueue.main.async {
someLabel.text = response.status
//...
}
}