我正在学习程序化用户界面,我有点痴迷于干净的代码。
我目前正在构建一个TabBarVC,这样我就可以管理我所有的VC,但是在这样做的时候我得到了一个错误消息。
import UIKit
class MainTabBarVC: UITabBarController {
let firstVC = FirstVC()
let secondVC = SecondVC()
let firstNavVC = UINavigationController(rootViewController: firstVC) // Cannot use instance member 'firstVC' within property initializer; property initializers run before 'self' is available
let secondNavVC = UINavigationController(rootViewController: secondVC) // Cannot use instance member 'secondVC' within property initializer; property initializers run before 'self' is available
let viewControllers = [firstNavVC, secondNavVC]
override func viewDidLoad() {
super.viewDidLoad()
self.setupViews()
}
func setupViews() {
// Nav Configs
self.firstVC.view.backgroundColor = .systemBackground
self.firstVC.navigationItem.title = "First Nav"
self.secondVC.view.backgroundColor = .systemBackground
self.secondVC.navigationItem.title = "Second Nav"
// Tab Configs
self.firstNavVC.tabBarItem.title = "First TAB"
self.secondNavVC.tabBarItem.title = "Second TAB"
}
}
我知道如果我把firtNavVC,secondNavVC和viewcontrollers放在setupViews里面,它会工作,但我不喜欢一个函数有太多行代码,特别是当它变大的时候。
所以除了我的问题,有没有任何扩展或枚举函数,我可以轻松地管理我所有的UINavigationController,UITabBarController和UIViewController,如枚举,可以调用函数,每当我需要调用或添加一个新的VC。
1条答案
按热度按时间7lrncoxx1#
您可以将
let
s更改为lazy var
s。但是,我认为您维护对所有这些视图控制器的示例属性引用的冲动是错误的。我要做的就是将
let
s移动到setupViews
中。你不需要一个对这些对象的永久引用;你只需要创建它们,配置它们,并将视图控制器指定为选项卡栏控制器的子控件(顺便说一句,你的代码缺少这一关键步骤)。