UPDATE
只有在使用从类名后缀派生的名称命名单例方法时,才需要使用下面的解决方法,即OPs问题方法名称是模型,类名为MyModel .
如果将方法重命名为singleton之类的东西,则可以从Swift中调用它,如下所示:
let m = MyModel.singleton()
我不知道这是好/坏的做法,但是当没有参数添加虚拟init方法时,我能够解决初始化器转换无法解决的问题 . 因此,使用其他答案中的代码作为示例:
@interface XYZThing : NSObject
+ (XYZThing*) thing;
+ (XYZThing*) thingWithFoo:(int)foo bar:(int)bar;
@end
@implementation XYZThing
+ (XYZThing*) thing
{
NSLog(@"This is not executed");
return nil;
}
+ (XYZThing*)thingWithFoo:(int)foo bar:(int)bar
{
NSLog(@"But this is");
return nil;
}
@end
...
let thing = XYZThing()
let otherThing = XYZThing(foo:3, bar:7)
使用上面的代码,不会调用thing方法,但是thingWithFoo:bar:方法是 .
但如果它改为this,那么现在将调用thing方法:
@interface XYZThing : NSObject
+ (XYZThing*) init;
+ (XYZThing*) thing;
+ (XYZThing*) thingWithFoo:(int)foo bar:(int)bar;
@end
@implementation XYZThing
+ (XYZThing*) init
{
return nil;
}
+ (XYZThing*) thing
{
NSLog(@"Now this is executed");
return nil;
}
+ (XYZThing*)thingWithFoo:(int)foo bar:(int)bar
{
NSLog(@"And so is this");
return nil;
}
@end
...
let thing = XYZThing()
let otherThing = XYZThing(foo:3, bar:7)