单身迅捷的困难

时间:2015-05-07 09:06:26

标签: ios swift singleton

我正在尝试在我的swift应用中使用单身 我有一个我在ObjectiveC中使用的课程,现在我在swift使用桥接标题...

在单身人士课上,这是我的代码......

SharedManger.h档案

 +(SharedManager *)sharedInstance;

 @property (strong, nonatomic) NSMutableDictionary *dictobject;

SharedManger.m档案

 + (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];
 }  
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()
}

问题:

  1. 所以这是快速的正确方法,还是有更好的方法?
  2. 修改
    故事板层次结构是navbar -> loginVC -> VC1 ->VC2 正如@Schemetrical所说......我使用他的方法singleton ....当我来自loginVC时它可以正常工作我可以从singleton访问数据.... 但是一次登录后我的根视图控制器发生了变化并且来自VC1,那时它显示为空singleton ....为什么会这样?

1 个答案:

答案 0 :(得分:4)

Swift 1.2让创建单身人士变得非常容易。静态实例只会初始化一次,而dictObject可供其他类检索。

class SharedManager {

    static let sharedInstance = SharedManager()

    var dictObject = // some default value

}