2015-11-18 5 views
-1

У меня есть классы A, B, C, D (B, C, D - контроллеры представлений). класс A имеет таймер и по истечении таймера. Я хочу, чтобы мои контроллеры получали данные от A и соответственно обновляли.Передача данных между различными классами swift 2

Ниже мой класс А

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 делегатов, по одному для каждого класса, является есть ли другое лучшее решение для этого?

+1

NSNotification? – almas

+1

Да, NSNotificationCenter –

+1

Чтобы использовать NSNotificaiton, вам необходимо убедиться, что контроллеры представлений B, C & D необходимо создать. Например: Если у вас есть иерархия контроллера вида, то B -> C -> D. и прямо сейчас на экране отображается только B. C & D еще не созданы, поэтому они не получат уведомление. – TheAppMentor

ответ

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 

}