【问题标题】:How to check if function finished?如何检查功能是否完成?
【发布时间】:2019-08-27 06:43:33
【问题描述】:

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

     }

}

}

【问题讨论】:

  • 如果您有一个地方需要访问数据,那么您可以在那里获取数据并使用完成处理程序。如果有多个位置或逻辑松散耦合,那么您可以在获取数据后发布Notification。感兴趣的对象可以订阅该通知。
  • 另外,我建议您将GlobalUser.json 设为普通可选,而不是隐式展开的可选 - 这样您就可以轻松安全地检查数据是否已被检索。
  • @Paulw11 非常感谢,使用Notification 正是我所需要的!我还将 GlobalUser.json 更改为普通的可选项,因此我可以检查变量是否为 nil。谢谢!

标签: ios swift xcode


【解决方案1】:

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

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

查看here (Tutorial)here 甚至there (Swift Closures Doc) 了解更多信息

【讨论】:

  • 嗨,感谢您的帮助,我认为此解决方案的唯一问题是每次尝试使用全局变量时都需要调用该函数?如果是这样的话,会导致数据被反复下载,有没有办法避免这种情况?
  • 嗯,根据你的问题,这绝对是一个答案——一个合适的答案。您是否一遍又一遍地调用getData() 函数?我们没有看到。请发布回答您的问题所需的所有代码
  • @impression7vx ,感谢您的帮助,请阅读我指定的问题,即使用上述解决方案将一遍又一遍地调用 getData() 函数。谢谢
  • 是的,但是为什么呢?将它放在计时器上 - 如果它被调用 - 使计时器无效并且函数将不再被调用......或者异步,无论哪种方式,相同的概念
猜你喜欢
  • 2019-05-21
  • 2013-10-11
  • 1970-01-01
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
相关资源
最近更新 更多