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 出现两个错误:
- 无法用存储的属性覆盖
tabBarController
- '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()
}
}
由于您没有分配任何特定于 tabBarController
的内容,您可以这样做:
var tabBarController = UITabBarController()
并且在 init 方法中不提及它。
对于错误 2,您只需要按照它的说明添加 init(coder:)
,因为您在没有指定初始化程序的情况下对 class 进行子class。
只需将 tabBarController 重命名为例如。我的标签栏控制器。
关于所需的初始化:只需单击左侧的红点,直到它建议插入其他代码并让它执行此操作。
更好的方法是使用 awakeFromNib
而不是 init.
我有以下代码:
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 出现两个错误:
- 无法用存储的属性覆盖
tabBarController
- '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()
}
}
由于您没有分配任何特定于 tabBarController
的内容,您可以这样做:
var tabBarController = UITabBarController()
并且在 init 方法中不提及它。
对于错误 2,您只需要按照它的说明添加 init(coder:)
,因为您在没有指定初始化程序的情况下对 class 进行子class。
只需将 tabBarController 重命名为例如。我的标签栏控制器。
关于所需的初始化:只需单击左侧的红点,直到它建议插入其他代码并让它执行此操作。
更好的方法是使用 awakeFromNib
而不是 init.