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)
我不推荐单视镜用于视图控制器.应在需要时创建视图控制器(及其视图),并在被解除时允许取消分配.而且你正在失去许多故事板的好处(通过它你可以看到场景之间的逻辑流与它们之间的分段).而且,如果在不同的上下文中使用此视图控制器,则会引发视图控制器层次结构与视图层次结构不同步的问题.我真的不鼓励你使用单例视图控制器.
但如果你打算这样做,你可以做那样的事......
| 归档时间: |
|
| 查看次数: |
7005 次 |
| 最近记录: |