如何从Swift中调用不带参数的Obj-c初始化器类方法



我在Obj-C中有一个类,它只能通过调用+new来初始化,不支持-init

@interface SetupMainController : UIViewController
+(SetupMainController *)new;
-(id)init __attribute__((unavailable("Must use +new")));
@end

我正在尝试在swift中运行以下等效的obj-c代码:

SetupMainController *setupController = [SetupMainController new];
[self presentViewController:setupController animated:YES completion:nil];

像这样:

let sc : SparkSetupMainController = SparkSetupMainController.new()

或:

let sc : SparkSetupMainController.new()

或:

let sc : SparkSetupMainController()

(它显然试图调用-init,这是被禁止的)所有故障,获取"."后面的预期成员名称时出错。

我找到了这样或这样的答案,或者苹果文档,但没有一个能直接回答如何在Swift中完成这项简单的任务。

帮助通知

如果将Objective-C类中的new更改为:

+(id)mynew;

然后突然一切正常:

    var s: SetupMainController = SetupMainController.mynew()

不知道为什么不能覆盖+new。也许是因为是类方法?

编辑:为了给这个问题增加更多的神秘感,如果你在苹果的文档中查找new,它是在Swift中使用定义的

class func `new`() -> Self!

backticks的意思是"这是保留的"吗?

编辑2:看起来new与Swift 根本不起作用

此代码不编译:

let j = NSNumber.new()
var s = NSString.new()

第3版::解决方案

new是Swift中的一个保留关键字,因此要调用+new(),需要添加反勾号:

let string = NSString.`new`()

这个答案值得称赞

相关内容

最新更新