Swift:无法使用存储的属性覆盖并且 'required' 初始化器 'init(coder:)' 必须由 'UIViewController' 的子类提供

Swift: Cannot Override with a stored property and 'required' initializer 'init(coder:)' must be provided by subclass for 'UIViewController'

我有以下代码:

import UIKit

class tabBarVC: UIViewController, UITabBarControllerDelegate {

    var tabBarController : UITabBarController // ERROR1:  Cannot override with a stored property 'tabBarController'

    override init() {
        super.init()
        self.tabBarController = UITabBarController()

    }
    override func viewDidLoad() { //ERROR2:  'required' initializer 'init(coder:)' must be provided by subclass for 'UIViewController' 
        super.viewDidLoad()
    }
}

我需要定义和初始化一个名为 tabBarController 的变量,它可以作为 self.tabBarController 访问。

Xcode 出现两个错误:

  1. 无法用存储的属性覆盖 tabBarController
  2. 'required' 初始化程序 init(coder:) 必须由 UIViewController
  3. 的子类提供

我做错了什么?

**编辑**

import UIKit

class tabBarVC: UIViewController, UITabBarControllerDelegate {

    var tabBarController : UITabBarController() // Error: "Consecutive declarations on a line must be separated by ';'"

    override init() {
        super.init()
        self.tabBarController?.delegate = self
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

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

由于您没有分配任何特定于 tabBarController 的内容,您可以这样做:

 var tabBarController = UITabBarController()

并且在 init 方法中不提及它。

对于错误 2,您只需要按照它的说明添加 init(coder:),因为您在没有指定初始化程序的情况下对 class 进行子class。

只需将 tabBarController 重命名为例如。我的标签栏控制器。

关于所需的初始化:只需单击左侧的红点,直到它建议插入其他代码并让它执行此操作。

更好的方法是使用 awakeFromNib 而不是 init.