单例难度 swift
difficulty in singleton swift
我正在尝试在我的 swift
应用程序中使用单例。
我有一个 class,我在 ObjectiveC
中使用过它,现在我在 swift
中使用桥接头...
在单例中 class 这是我的代码...
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()
}
问题:
- 所以这是 swift 中的正确方法,或者有更好的方法吗?
编辑:
故事板层次结构是 navbar -> loginVC -> VC1 ->VC2
正如@Schemetrical 所说...我将他的方法用作singleton
...当我来自loginVC
时它工作正常我可以从singleton
...[=42 访问数据=]
但是一次登录后,我的根视图控制器发生了变化并来自 VC1
并且那一次它显示为空 singleton
...为什么会这样?
Swift 1.2 使创建单例变得非常容易。静态实例只会被初始化一次,dictObject 将可供其他 类 检索。
class SharedManager {
static let sharedInstance = SharedManager()
var dictObject = // some default value
}
我正在尝试在我的 swift
应用程序中使用单例。
我有一个 class,我在 ObjectiveC
中使用过它,现在我在 swift
中使用桥接头...
在单例中 class 这是我的代码...
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()
}
问题:
- 所以这是 swift 中的正确方法,或者有更好的方法吗?
编辑:
故事板层次结构是 navbar -> loginVC -> VC1 ->VC2
正如@Schemetrical 所说...我将他的方法用作singleton
...当我来自loginVC
时它工作正常我可以从singleton
...[=42 访问数据=]
但是一次登录后,我的根视图控制器发生了变化并来自 VC1
并且那一次它显示为空 singleton
...为什么会这样?
Swift 1.2 使创建单例变得非常容易。静态实例只会被初始化一次,dictObject 将可供其他 类 检索。
class SharedManager {
static let sharedInstance = SharedManager()
var dictObject = // some default value
}