【问题标题】:Passing data between different classes swift 2swift 2 在不同类之间传递数据
【发布时间】:2015-11-18 06:17:25
【问题描述】:

我有一个 A、B、C、D 类(B、C、D 是视图控制器)。 A 类有一个计时器,并且计时器已过,我希望我的控制器从 A 接收数据并进行相应更新。

下面是我的A班

class MembersStatusUpdateManager{

var timer:NSTimer = NSTimer(timeInterval: 60*5, target: "self", selector: "updateStatuses", userInfo: nil, repeats: true)
var deltaToken:String = ""
var statusData:NSMutableArray? = nil
var deleteage:MembersStatuUpdatedDelegate?

func startTimer(){
    NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
}

func updateStatuses(){
    //Update the statues
}

}

我知道使用协议/委托我可以向类发送数据,但在这种情况下,我创建了 3 个委托,每个类一个,还有其他更好的解决方案吗?

【问题讨论】:

  • 是的,NSNotificationCenter
  • 要使用 NSNotificaiton,您需要确保视图控制器 B、C 和 D 需要被实例化。例如:如果您有一个视图控制器层次结构,例如 B -> C -> D 。现在只有 B 在屏幕上。 C & D 尚未创建,因此他们不会收到通知。
  • 感谢您指引我正确的方向 NSNoficationCenter 是最适合这种情况的解决方案。

标签: swift swift2 xcode7


【解决方案1】:

您可以使用全局类概念,这是解决方案。

首先创建一个全局类

import Foundation


 class User {
  class var sharedInstance: User {
  struct Static {
       static var instance: User?
       static var token: dispatch_once_t = 0
  }

 dispatch_once(&Static.token) {
    Static.instance = User()
 }

 return Static.instance!

 }

var timer: NSTimer?

}

然后将数据存储在您想要的类中

 class ViewController: UIViewController { 

let user = User.sharedInstance


 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

   if segue.identifier == "showDetails" {
        self.user.timer = thisTime
   } 
 }
}

然后检索数据:-

 class ViewController: UIViewController { 
    let user = User.sharedInstance
    mylabel.text = self.user.timer 

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    相关资源
    最近更新 更多