У меня есть несколько помощников, которые выполняют Alamofire getRequest для API, а затем заполняют некоторые массивы, которые мне нужны, чтобы следующий ViewController отображал правильную информацию. Я вызываю запросы в appDelegate здесь:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
CGCoins.shared.getData { (arr) in
}
CGExchange.shared.getData { (arr) in
}
CGPrices.shared.getData { (arr) in
}
Но для их завершения требуется некоторое время, и ViewController загружается до того, как это приведет к сбою, или к пустым меткам и т. Д. Вот как выглядят помощники внутри:
import Foundation
import Alamofire
import SwiftyJSON
class CGCoins {
static let shared = CGCoins()
var ids: [String] = []
var symbols: [String] = []
var names: [String] = []
var coinDictionary: [String : String] = [:]
var defaultCurrency = UserDefaults.standard.string(forKey: "DefaultCurrency")
func getData(completion:@escaping(_ arr:[Type])->()) {
/// alamofire / urlsession request
let url = "https://api.coingecko.com/api/v3/coins/list"
Alamofire.request(url).responseJSON { response in
switch response.result {
case .failure(let error):
// Do whatever here
return
case .success(let data):
// First make sure you got back a dictionary if that's what you expect
let responseJSON = JSON(response.result.value!)
if responseJSON.count != 0 {
//do whatever you want with your object json
parse(json: responseJSON)
}
}
}
/// after finish completion(arr)
func parse(json: JSON) {
for result in json[].arrayValue {
let id = result["id"].stringValue
let symbol = result["symbol"].stringValue
let name = result["name"].stringValue
ids.append(id)
symbols.append(symbol)
names.append(name)
for (index, element) in ids.enumerated() {
coinDictionary[element] = symbols[index]
}
}
}
}
}
pageViewController и ViewController используют эти данные. Я попытался создать второй экран-заставку после запуска и вызвать там запросы get, но как я могу сделать так, чтобы он не выдвигался на pageViewController до тех пор, пока запросы get не будут завершены?