swift2 如果我不将对象分配给自身,则pushViewController不会运行

l7wslrjt  于 2022-11-06  发布在  Swift
关注(0)|答案(1)|浏览(224)

请详细解释为什么我们必须写“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()
    }
}
jmp7cifd

jmp7cifd1#

您的业务对象类中的ViewController为nil。那么“nil”?.push不执行任何操作。
它的nil原因是“ViewDidLoad”在u初始化它时/之后没有执行。它在推送后执行,并且确实加载了其中的每个视图。
这里:var mainObj:ViewController?U设置init方法,将mainObj初始化为nil。因为你在类型后面放了一个“?”。删除它,它将要求一个传递ViewController的init。
因此,在初始化时传递ViewController,或者在初始化后手动设置它,就像你正在做的那样。

相关问题