【问题标题】:difficulty in singleton swift单例快速的困难
【发布时间】:2015-05-14 13:51:41
【问题描述】:

我正在尝试在我的 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. 所以这是正确的方法,还是有更好的方法?

编辑:
故事板层次结构是navbar -> loginVC -> VC1 ->VC2 正如@Schemetrical 所说...我将他的方法用作singleton....当我来自loginVC 时它工作正常我可以访问来自singleton 的数据....
但是一次登录后,我的根视图控制器发生了变化,来自VC1,那一次它显示为空singleton....为什么会这样?

【问题讨论】:

    标签: ios swift singleton


    【解决方案1】:

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

    class SharedManager {
    
        static let sharedInstance = SharedManager()
    
        var dictObject = // some default value
    
    }
    

    【讨论】:

    • 好的...所以我只需要制作一个 .swift 文件而不是我的 2 个 ObjectiveC 文件
    • 确实如此。默认情况下,在您的项目范围内,所有变量都可用,但您可以选择将它们设为私有或公开。
    • 你能改一下吗?
    • 我想让你重复上一个问题,因为我不明白你想说什么._.
    • 作为问题,我有viewcontroller.swift 文件...所以我是否在其中编写了正确的代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2016-06-30
    • 2017-09-16
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多