【问题标题】:Swift: Cannot Override with a stored property and 'required' initializer 'init(coder:)' must be provided by subclass for 'UIViewController'Swift:不能用存储的属性覆盖,并且“必需”初始化程序“init(coder:)”必须由“UIViewController”的子类提供
【发布时间】:2015-01-05 18:00:13
【问题描述】:

我有以下代码:

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()
    }
}

【问题讨论】:

  • 如果您从情节提要或 nib 加载此 VIewController,则需要更改 required init(coder aDecoder: NSCoder) 以调用超类声明 super.init(coder: aDecoder)

标签: swift xcode6 xcode6.1


【解决方案1】:

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

 var tabBarController = UITabBarController()

并没有在 init 方法中提及它。

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

【讨论】:

  • 当我执行 'var tabBarController = UITabBarController()' 时出现错误,“一行上的连续声明必须用 ';' 分隔”
  • 你把它放在 init() 方法之外? var tabBarController = UITabBarController()
  • 我对显示确切代码的问题进行了编辑。
  • 哦,我知道您只需要将 : 替换为 =
  • 应该是:var tabBarController = UITabBarController() 不是:with :
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多