首页 > 解决方案 > 如何检查功能是否完成?

问题描述

我有一个从 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!)    

     }

}

}

标签: iosswiftxcode

解决方案


前段时间我遇到了这个。这个想法是有一个completionHandler,它返回

func yourFonction(_ parameters: [String: String], completionHandler: (_ result: [String: Any], _ error: Error) -> Void){
     //Your Code
     completionHandler(result, error)
}

这里(教程)这里甚至那里(Swift Closures Doc)了解更多信息


推荐阅读