Swift:不能用存储属性覆盖,'required'初始化'init(coder :)'必须由'UIViewController'的子类提供

问题描述 投票:0回答:2

我有以下代码:

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的子类提供

我究竟做错了什么?

**编辑**

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()
    }
}
swift xcode6 xcode6.1
2个回答
3
投票

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

 var tabBarController = UITabBarController()

并且在init方法中没有提到它。

对于错误2,您只需要按照它所说的并添加init(coder:),因为您在没有指定初始值设定项的情况下继承该类。


1
投票

只需将tabBarController重命名为eg。 myTabBarController。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.