在Swift 3中创建ViewController的单例
我知道如何快速创建单例类。创建单例类的最佳简便方法如下:
class Singleton { static let sharedInstance = Singleton()
}
但是我不需要任何普通班的单身人士。我需要为viewcontroller类创建单例。所以我用这段代码创建单例
class AViewController:UIViewController { static let sharedInstance = AViewController()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
它给我附近的错误 AViewController()
Missing argument for parameter 'coder' in call
似乎要我使用进行初始化init(coder: NSCoder)
。但是我应该通过什么参数或值coder
?
回答:
如果您真的想为某个场景对应的视图控制器设置单例,则可能需要执行以下操作:
class SecondViewController: UIViewController { static let shared = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Foo")
}
在此示例中,情节提要是Main.storyboard
,问题场景的情节提要标识符是Foo
。显然,将这些值替换为适合您的情况的值。
然后您的另一个调用此方法的视图控制器可以执行以下操作:
@IBAction func didTapButton(_ sender: Any) { let controller = SecondViewController.shared
show(controller, sender: self)
}
我不建议将单例用于视图控制器。视图控制器(及其视图)应在需要时创建,并在解散它们时允许释放。而且您将失去许多情节提要优势(通过它们您可以看到场景之间的逻辑流程以及场景之间的顺序)。而且,如果您在不同的上下文中使用此视图控制器,则会引发由视图控制器层次结构与视图层次结构不同步引起的问题。我真的不鼓励您使用单例作为视图控制器。
但是,如果您打算这样做,则可以执行类似的操作…
以上是 在Swift 3中创建ViewController的单例 的全部内容, 来源链接: utcz.com/qa/421421.html