I am trying to use singleton in my swift app.
I have a class which i used in ObjectiveC and now i am using it in swift using bridging-header...
In singleton class here is my code...
SharedManger.h file
+(SharedManager *)sharedInstance;
@property (strong, nonatomic) NSMutableDictionary *dictobject;
SharedManger.m file
+ (id)sharedInstance
{
static SharedManager *sharedMyManager = nil;
@synchronized(self)
{
if (sharedMyManager == nil)
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMyManager = [self loadInstance];
});
}
}
return sharedMyManager;
}
+(instancetype)loadInstance
{
NSData* decodedData = [NSData dataWithContentsOfFile: [SharedManager filePath]];
if (decodedData)
{
SharedManager* sharedData = [NSKeyedUnarchiver unarchiveObjectWithData:decodedData];
return sharedData;
}
return [[SharedManager alloc] init];
}
in viewcontroller.swift
class var sharedInstance: viewcontroller {
struct Static {
static var onceToken: dispatch_once_t = 0
static var instance: viewcontroller? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = viewcontroller()
}
return Static.instance!
}
func sharedManager()->SharedManager{
return SharedManager.sharedInstance()
}
Question:
- So this is right approach in swift or any better approach is there?
Edit:
storyboard hierarchy is navbar -> loginVC -> VC1 ->VC2
as @Schemetrical says...i used his approach as singleton....it works fine when i comes from loginVC i can access data from singleton....
but after one time login my root view controller changes and comes from VC1 and that time it display empty singleton....why is it so?