ios - 如何在加载 viewController 之前等到 API 完成获取请求和附加变量
问题描述
我有一些助手对 API 执行 Alamofire getRequest,然后填充一些我需要的数组,以便下一个 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 使用这些数据。我尝试在启动后创建第二个启动画面并在那里调用获取请求,但是如何让它在获取请求完成之前不推送到 pageViewController?
解决方案
推荐阅读
- javascript - 在 discord.js 中创建重启命令
- sql - SQL中某列的行号
- amazon-web-services - AWS -SES 验证企业电子邮件
- c - isdigit 函数未捕获 argv[] 中的混合值
- mysql - 在 Mysql 中使用重复值停止自动递增
- hash - 如何在 SAS 的哈希表中使用 %let 宏
- javascript - UnhandledPromiseRejectionWarning:TypeError:使用 Jest + Angular 将循环结构转换为 JSON
- c - 如何将用户输入添加到 void 函数?
- pandas - 使用 NaN 的 Python pandas DataFrame 操作
- excel - 每个循环通过工作簿中的工作表多次的单个 VBA