ios - 如何检查功能是否完成?
问题描述
我有一个从 API 请求数据并将其放入全局结构的函数,因此我可以从应用程序的任何位置读取该数据,所有其他函数和类主要在该数据中工作。我想在运行其他类函数之前检查该函数是否已完成数据加载。
其他功能在不同的类中。
我不能使用完成处理程序 (completion: @escaping(_ success: Bool) -> Void) 。因为这会在每次调用时触发该函数,因此会导致数据被一遍又一遍地下载。
相反,我正在寻找一种方法来检查该功能是否已完成其下载任务,然后继续执行其他功能。
这必须是动态的,因为假设设备上的互联网无法正常工作,然后用户连接到互联网,该功能将需要再次运行以尝试获取数据(可以使用刷新按钮)和通知其他类和函数它再次完成,以便其他函数可以开始将数据加载到变量中
import Foundation
import Alamofire
import SwiftyJSON
struct GlobalUser {
static var json : JSON!
}
func getData() {
// set api url
let LOCATIONAPI_URL = "https://api.darksky.net/forecast/0123456789abcdef9876543210fedcba/42.3601,-71.0589"
// request JSON from url, using Alamofire Library
Alamofire.request(LOCATIONAPI_URL).responseJSON { (response) in
print("data requested")
let result = response.result
// check if respose is valid
if result.isSuccess{
GlobalUser.json = JSON(result.value!)
}
}
}
解决方案
前段时间我遇到了这个。这个想法是有一个completionHandler,它返回
func yourFonction(_ parameters: [String: String], completionHandler: (_ result: [String: Any], _ error: Error) -> Void){
//Your Code
completionHandler(result, error)
}
看这里(教程),这里甚至那里(Swift Closures Doc)了解更多信息
推荐阅读
- python - 追溯小问题
- r - 使用 ggplot2 (R) 通过重复为箱线图中的单个数据点着色
- php - 如何修复“意外的'endwhile'”错误?
- automation - Winium - 为桌面自动化定位没有名称或自动化 ID 的元素
- sql - 雄辩的 sortBy datetime 属性格式的日期
- mongodb - Mongo DB - 获取每个唯一电子邮件地址的最后数据 - 按区域分组
- python - c++ 和 python 层之间的 opencv.groupRectangles() 差异
- git - 当文件报告为新/已删除时如何区分更改
- c++ - 使用 clang/llvm 的“reinterpret_cast”问题 - 错误:“..casts away qualifiers”
- slider - 如果 Slick Slider (Slick.JS) 在 div 内的点击事件中中断,如何修复它?