我在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`()
这个答案值得称赞