在swift 3中创建一个viewcontroller的单例

Pol*_*les 4 singleton viewcontroller ios swift

我知道如何在swift中创建单例类.创建单例类的最佳和最简单的方法如下:

class Singleton {
    static let sharedInstance = Singleton()
}
Run Code Online (Sandbox Code Playgroud)

但我不需要任何普通班级的单身人士.我需要为viewcontroller类创建单例.所以我正在使用这个代码创建单例

class AViewController:UIViewController {

    static let sharedInstance = AViewController()

    required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

}
Run Code Online (Sandbox Code Playgroud)

它给我附近的错误 AViewController()

Missing argument for parameter 'coder' in call
Run Code Online (Sandbox Code Playgroud)

看起来它想要我初始化init(coder: NSCoder).但是我应该通过什么参数或值coder呢?

Rob*_*Rob 10

如果你真的想为一个场景对应的视图控制器使用单例,你可能会做类似的事情:

class SecondViewController: UIViewController {

    static let shared = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Foo")

}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,故事板是Main.storyboard和所讨论场景的故事板标识符Foo.显然,在您的情况下替换适当的值.

然后你调用它的另一个视图控制器可以执行以下操作:

@IBAction func didTapButton(_ sender: Any) {
    let controller = SecondViewController.shared
    show(controller, sender: self)
}
Run Code Online (Sandbox Code Playgroud)

我不推荐单视镜用于视图控制器.应在需要时创建视图控制器(及其视图),并在被解除时允许取消分配.而且你正在失去许多故事板的好处(通过它你可以看到场景之间的逻辑流与它们之间的分段).而且,如果在不同的上下文中使用此视图控制器,则会引发视图控制器层次结构与视图层次结构不同步的问题.我真的不鼓励你使用单例视图控制器.

但如果你打算这样做,你可以做那样的事......