Сначала вы пишете для этого функцию, и давайте предположим, что имя этой функции fetchData и ваша модель данных должны соответствовать протоколу Codable.
func fetchData(url: String, completion: @escaping(Result<[DataModel], Error>)->()){
guard let url = URL(string: url) else { return }
URLSession.shared.dataTask(with: url){(data, response, error) in
if error != nil{
completion(.failure(error!))
print(error!)
} else{
guard let _ = response as? HTTPURLResponse, let jsonData = data else { return }
let yourDataModel = try? JSONDecoder().decode([DataModel].self, from: jsonData)
guard let dataModels = mainPageContentData else { return } //dataModels is array of DataModel
completion(.success(dataModels)) // And we send this array to completion blocks
}
}.resume()
}
И вам следует использовать эту функцию следующим образом
fetchData { (result) in //Trailing closure syntax
switch result {
case .failure(let error):
print(error)
case .success(let datas):
for data in datas{
print(data)
}
}
}