有没有办法在后台线程和swift中的当前viewcontroller之间进行通信?

时间:2015-10-29 07:35:32

标签: ios swift macos

我的故事板中有几个ViewControllers,并且有一个后台线程用于从服务器接收消息,后台线程和ViewControllers在不同的类中。

根据收到的消息,我想将消息传输到指定的ViewController,我曾经使用Handler在Android中执行此操作,但是如何在swift中执行此操作?

3 个答案:

答案 0 :(得分:1)

取决于,你有很多选择。你是如何管理你的联系的?

  1. 你可以使用委托(注意委托代理人 在主线程上),如果你需要1.1通信
  2. 您可以使用NSNoticationCenter并将您的视图控制器注册到您将根据服务器答案生成的特定通知,(注意在主线程上发布它们)。好的,如果你需要1. *沟通
  3. 你甚至可以使用GCD块(注意在主线程上调用它们)
  4. 在主线程上进行调用的建议非常通用,这取决于您的要求,但如果需要更新您的UI,则大多是正确的。

答案 1 :(得分:0)

您可以尝试使用Foundation.NSNotification

答案 2 :(得分:0)

U可以使用Notification实现此目的。

在您的后台线程中,一旦您收到来自服务器的消息,就像这样发布消息

  dispatch_async(dispatch_get_main_queue(), {
        NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: nil)
     })

并在每个Notification Observer班级

上注册ViewController 像这样

class A:UIViewController {

    override func viewDidLoad() {
      super.viewDidLoad()

       NSNotificationCenter.defaultCenter().addObserver(self, selector: "UpdateValues", name: "NotificationIdentifier", object: nil) 
   }

  func UpdateValues(){   
      // put your code 
  }

}