【发布时间】:2014-06-10 18:35:08
【问题描述】:
我有一个如下的 Objective-C 单例:
@interface MyModel : NSObject
+ (MyModel*) model;
...
+ (MyModel*) model
{
static MyModel *singlton = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^ {
singlton = [[MyModel alloc] initSharedInstance];
});
return singlton;
}
- (MyModel*) initSharedInstance
{
self = [super init];
if (self)
etc.
}
在 GUI 代码中的多个位置调用如下:
[[MyModel model] someMethod];
因此,模型将作为 GUI 的任何部分碰巧首先引用它的结果而创建。
我不确定如何在 Swift 中实现通过 [[MyModel model] someMethod] 访问类的等效方法,因为使用 Swift 的所有示例都涉及使用初始化程序创建对象以及何时将 Objective C 类方法代码转换为当方法没有参数时,Swift初始化程序代码存在问题。
【问题讨论】:
-
您应该能够以
MyModel.model的身份访问它并获取单例对象。建议你把id改成instancetype -
如果我这样做“让 m = MyModel.model”,我会收到一个编译警告。它说:“模型不可用,使用对象构造 MyModel()”
-
不管是 MyModel.model 还是 MyModel.model() 都是一样的编译错误
-
@Aminoacids:我认为您的问题是该方法看起来像一个方便的构造函数(沿着
+[NSArray array]的行),这导致 Swift 对其进行特殊处理。尝试将其命名为更单例的名称,例如sharedModel。 (目前无法对此进行测试,但我认为就是这样。) -
@Chuck,是的,我在 H 先生的更新中将其重命名为单例,这很好
标签: objective-c swift