Swift UIViewController自定义init() - 错误无法分配给self

时间:2015-06-12 08:53:59

标签: ios objective-c swift initialization

在Objective-C中,我过去常常覆盖init的{​​{1}}方法。我无法在Swift中实现同样的目标:

Objective-C代码:

UIViewController

如果我尝试在Swift中这样做,我会收到错误#34;无法分配给自己"。我已经实现了- (instancetype)init { self = [super init]; if (self) { self = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"ViewController"]; } return self; } 方法,只是为了解决一些错误。

有人可以告诉我如何将上述Objective-C代码移植到Swift以获得所需的行为。

我想从故事板中初始化ViewController。

3 个答案:

答案 0 :(得分:2)

您无法在self中分配init。您应该使用class方法或公共函数。

class func viewControllerFromStoryboard() -> ViewController? {
    let storyboard = UIStoryboard(name: "Main", bundle: NSBundle(forClass: ViewController.self))
    if let controller = storyboard.instantiateViewControllerWithIdentifier("ViewController") as? ViewController
    {
        return controller
    }
    return nil
}

您可以致电

let controller = ViewController.viewControllerFromStoryboard()

答案 1 :(得分:0)

swift中的init方法与objc中的方法不同。

在objc the only requirement for init method is that the initializing method begins with the letters “init”中。您在此方法中创建一个实例并分配给指针self

而在swift Initializing is the process of preparing an instance of a class, structure, or enumeration for use。它有点像你已经有一个self点的实例。你在init方法中做的是设置自己的属性和其他

这就是为什么你不能迅速为班级分配自我

但您可以在struct

的变异方法中指定给self

答案 2 :(得分:0)

我建议你这样写

class func customInit -> XXXController {
    var vc: XXXController = XXXController()
    //  write something that you want to initialize 
    return vc 
}

就像你写objc

一样
- (instancetype)initCustom {
    self = [super init];
    if (self) {
       //  write something that you want to initialize 
    }
    return self; 
}

你可以单元格

var customVc: XXXController = XXXController.customInit()

就像

一样

XXXController *vc = [[XXXController alloc] initCustom]