gpt4 book ai didi

ios - UIViewController 的子类所需的初始值设定项

转载 作者:IT王子 更新时间:2023-10-29 05:34:49 26 4
gpt4 key购买 nike

我一直在尝试学习有关创建容器 View Controller 的教程。它在 Objective-C 中。我想将它转换为 Swift。我在这里发现了一些相同的问题,但我并没有从中得到太多。

这是代码。

import UIKit

class ContainerViewController: UIViewController { // Class "ContainerViewController" has no initializers - That I know why.

// 'required' initializer 'init(coder:)' must be provided by a subclass of UIViewController

var currentDetailViewController: UIViewController

override func viewDidLoad() {
super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

}

我已尝试执行这两个错误所说的操作,但仍然无效。

最佳答案

问题是:如果声明任何存储属性没有初始值,则必须实现自己的初始化程序来初始化它们。见this document .

像这样:

var currentDetailViewController: UIViewController

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
currentDetailViewController = UIViewController()
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}

convenience override init() {
self.init(nibName: nil, bundle: nil)
}

required init(coder aDecoder: NSCoder) {
currentDetailViewController = UIViewController()
super.init(coder:aDecoder)
}

但是,我认为这不是您想要的。

正确的解决方案取决于您在哪里初始化 currentDetailViewController

如果您始终在viewDidLoad 中对其进行初始化,那么您可以将其声明为"Implicitly Unwrapped Optional"

var currentDetailViewController: UIViewController!

override viewDidLoad() {
super.viewDidLoad()
self.currentDetailViewController = DetailViewController()
}

否则,如果currentDetailViewController 可以是nil,您应该将其声明为"Optional"

var currentDetailViewController: UIViewController?

关于ios - UIViewController 的子类所需的初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com