我想在我的班级中使用单身模式,其中带有参数的私人init
。它还具有一个名为setup
的类函数,它可以配置和创建共享实例。我的Objective-C代码将是:带参数的单身人士和init
@interface MySingleton: NSObject
+ (MySingleton *)setup:(MyConfig *)config;
+ (MySingleton *)shared;
@property (readonly, strong, nonatomic) MyConfig *config;
@end
@implementation MySingleton
static MySingleton *sharedInstance = nil;
+ (MySingleton *)setup:(MyConfig *)config {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] initWithConfig:config];
});
// Some other stuff here
return sharedInstance;
}
+ (MySingleton *)shared {
if (sharedInstance == nil) {
NSLog(@"error: shared called before setup");
}
return sharedInstance;
}
- (instancetype)initWithConfig:(RVConfig *)config {
self = [super init];
if (self) {
_config = config;
}
return self;
}
@end
我坚持斯威夫特:
class Asteroid {
var config: ASTConfig? // This actually should be read-only
class func setup(config: ASTConfig) -> Asteroid {
struct Static {
static let instance : Asteroid = Asteroid(config: config)
}
return Static.instance
}
class var shared: Asteroid? {
// ???
}
private init(config: ASTConfig) {
self.config = config
}
}
我觉得我还是在Objective-C的方式思考和无法迅速弄清楚。任何帮助?
哦,我已经知道这个(你可以在我的答案见)。但在这里我的问题是,我有一个参数的初始化。 – knshn 2015-02-10 12:08:06
对不起,我的答案更新以反映您的需求。这应该工作 – 2015-02-10 14:17:19
好吧,说我要在另一个班级使用这个班级。你如何将'config'对象传递给你在第一个解决方案顶部使用的全局私有变量?或者在第二个中,没有机会将'config'作为计算的'sharedInstance'的参数。 – knshn 2015-02-10 15:16:09