我在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被禁止) 一切都失败了 获得"预期会员名称'。'"错误。
我找到了this或this或apple docs等答案,但没有人直接回答如何在Swift中完成这个简单的任务。
帮助appriciated
答案 0 :(得分:1)
如果您将Objective-C类中的new
更改为:
+(id)mynew;
然后突然一切正常:
var s: SetupMainController = SetupMainController.mynew()
不知道为什么你不能覆盖+new
。也许是因为是一种类方法?
编辑:为了在这个问题上添加更多的神秘感,如果你在Apple的文档中查找new
,则在Swift中定义使用:
class func `new`() -> Self!
反引号是否意味着“这是保留的”?
编辑2 :看起来new
根本无法使用Swift
此代码无法编译:
let j = NSNumber.new()
var s = NSString.new()
编辑3::解决方案
new是Swift中的保留关键字,因此要调用+new()
,您需要添加后面的标记:
let string = NSString.`new`()