视图属性如何调用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
}
}
}
我敢肯定还有更多内容,但这应该让您大致了解 loadView
和 viewDidLoad
是如何通过访问 view
属性.
我无法理解 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
}
}
}
我敢肯定还有更多内容,但这应该让您大致了解 loadView
和 viewDidLoad
是如何通过访问 view
属性.