API呼び出しを行い、データをそのプロパティに保存するサービスクラスがあります。次に、インタラクター クラスには、サービス クラスの API 呼び出しを行うメソッドがあり、データが格納されるときにそれを返します。私は完了ハンドラーとディスパッチグループでこれを処理しようとしましたが、(何かが足りないと思います) これはうまくいきませんでした。この問題に対処するために私を助けていただければ幸いです。前もって感謝します!
サービス クラス:
class PunkApiService{
var beers = [Beer]()
func loadList(at page: Int){
//MARK: - Checks is URL is valid + pagination
guard let url = URL(string: "https://api.punkapi.com/v2/beers?page=\(page)&per_page=25") else {
print("Invalid URL")
return
}
//MARK: - Creating URLSession DataTask
let task = URLSession.shared.dataTask(with: url){ data, response, error in
//MARK: - Handling no erros came
guard error == nil else {
print(error!)
return
}
//MARK: - Handling data came
guard let data = data else{
print("Failed to load data")
return
}
do{
let beers = try JSONDecoder().decode([Beer].self, from: data)
self.beers.append(contentsOf: beers)
}
catch{
print("Failed to decode data")
}
}
task.resume()
}
および Interactor クラス (完了ハンドラーまたはディスパッチ グループなし):
class BeersListInteractor:BeersListInteractorProtocol{
private var favoriteBeers = FavoriteBeers()
private var service = PunkApiService()
//MARK: - Load list of Beers
func loadList(at page: Int) -> [Beer]{
service.loadList(at: page)
return service.beers
}
追加:完了ハンドラでの私の試み
var beers: [Beer]
func loadList(at page: Int, completion: ()->()){
service.loadList(at: page)
completion()
}
func completion(){
beers.append(contentsOf: service.beers)
}
loadList(at: 1) {
completion()
}