视图属性如何调用viewDidLoad函数?

How does the view property call the viewDidLoad function?

我无法理解 UIViewController 的视图 属性 如何调用 viewDidLoad() 方法。这没有意义,但我想了解幕后发生的事情。我确信这在 Swift 编程指南甚至可能在 Apple 的 UIViewController 参考指南中都有很好的解释,但现在太冗长了,无法完全理解。如果它在 Swift 编程指南中有解释,我不确定进一步研究它的正确术语或这个过程是如何工作的。也许计算 属性?然而,根据我对计算属性的了解,计算 属性 会执行某种逻辑,以便将其变量设置为新值,甚至可能是初始值。困扰我的是理解 属性 如何调用它的 class 中的函数的概念?最具体地说,UIViewController 中调用 viewDidLoad 方法的视图 属性。

这是帮助我偶然发现的代码:

func test_OnViewDidLoad_tableViewIsSet(){

        let storyboard = UIStoryboard.init(name: "Main", bundle: nil)

        let viewController = storyboard.instantiateViewController(withIdentifier: "ItemListViewController")

        let sut = viewController as! ItemListViewController

        _ = sut.view

        XCTAssertNotNil(sut.tableView)

    }

这是我的子classed UIViewController:

import UIKit

class ItemListViewController: UIViewController {

    var tableView: UITableView?

    override func viewDidLoad() {
        tableView = UITableView()
    }

}

这是可能发生的情况的粗略概述(我们没有 UIViewController 的源代码(它是用 Objective-C 编写的)。

class UIViewController: UIResponder {
    private var _view: UIView!

    var view: UIView! {
        get {
            if _view == nil {
                loadView()
                if _view != nil {
                    viewDidLoad()
                }
            }

            return _view
        }
        set {
            _view = newValue
        }
    }
}

我敢肯定还有更多内容,但这应该让您大致了解 loadViewviewDidLoad 是如何通过访问 view 属性.