我对编程还是很陌生,有时它用非常基本的概念咬住了我。
我在tableviewcontroller中将一个活动指示器定义为一个插座。

 @IBOutlet weak var activityIndicator: UIActivityIndicatorView!


数据下载以用数据填充表格视图是在具有下载功能的类中的单独文件中完成的。这些功能包括下载的完成处理程序。现在,如果我想插入

activityIndicator.stopAnimating()


在完成部分中,我得到消息“使用未解决的标识符activityIndi​​cator”。如何分别将acitivityIndi​​cator设置为全局属性,如何使下载类/函数识别tableViewController中定义的activityIndi​​cator?我知道这对大多数人来说可能是一个愚蠢的问题,但我只是不知道如何解决这个问题。

最佳答案

理想情况下,您不希望下载代码“了解” activityIndi​​cator。当viewController调用下载时,您可以传递另一个完成处理程序。然后,当下载完成处理程序运行时,调用此新的完成处理程序。 viewController知道activityIndi​​cator,因此可以将其停止。大致符合:

 // In ViewController
     myThing.doTheDownload(completion: {
         dispatch_async(dispatch_get_main_queue(), {
             self.activityIndicator.stopAnimating()
         })
     })

 // In download code
     func doTheDownload(completion completionHandler: (() -> Void)) {
          download(completion: {
              completionhandler()
          })
     }


请注意,activityIndi​​cator是一个UI元素,因此其代码必须在主线程上运行。

10-06 02:57