请详细解释为什么我们必须写“obj?.mainObj = self”行,以便pushViewController方法工作?因此,如果我删除“obj?.mainObj = self”行,pushViewController将不工作,但为什么?
class ViewController: UIViewController {
var obj:Bo?
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.white
obj = Bo()
// obj?.mainObj = self
obj?.setupViews()
}
func push(){
print("hello")
let controller = AppDetailController()
navigationController?.pushViewController(controller, animated: true)
}
}
class Bo:UIViewController{
var mainObj:ViewController?
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
}
func setupViews(){
mainObj = ViewController()
mainObj?.push()
}
}
1条答案
按热度按时间jmp7cifd1#
您的业务对象类中的ViewController为nil。那么“nil”?.push不执行任何操作。
它的nil原因是“ViewDidLoad”在u初始化它时/之后没有执行。它在推送后执行,并且确实加载了其中的每个视图。
这里:var mainObj:ViewController?U设置init方法,将mainObj初始化为nil。因为你在类型后面放了一个“?”。删除它,它将要求一个传递ViewController的init。
因此,在初始化时传递ViewController,或者在初始化后手动设置它,就像你正在做的那样。