SwiftUI:viewDidLoad 和 viewWillDisappear 的等价物是什么
SwiftUI: what is the equivalent stuff with viewDidLoad and viewWillDisappear
我曾经把GCDWebServer的start()
和stop()
放在viewDidLoad
和viewWillDisappear
中。
现在在 SwiftUI 中,我应该将它们放在哪个等效位置?
我尝试将服务器 init() 放入 scene(_ scene: UIScene, willConnectTo
,并将服务器 deinit() 放入 sceneDidEnterBackground(_ scene:
。
启动应用程序后,服务器成功启动,当我将应用程序推送到后台时,服务器停止了。那很好用。但是当应用程序returns再次到前台时,服务器不会再次启动。
代码:
class BrandViewController: UIViewController {
let mockServer = GCDServer()
let tableView = UITableView()
private let products = ProductAPI.loadProducts()
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.searchController = searchController
self.navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.title = "Search"
view.backgroundColor = .white
tableView.register(ProductCell.self, forCellReuseIdentifier: "productCell")
tableView.dataSource = self
tableView.delegate = self
view.addSubview(tableView)
// Start GCDWebServer
mockServer.initWebServer()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
tableView.frame = view.bounds
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
mockServer.stopWebServer()
}
}
如果您在 sceneDidEnterBackground
上销毁服务器,那么解决方案是将服务器创建(并且,正如我假设的开始)从 scene(_ scene: UIScene, willConnectTo
转移到 sceneWillEnterForeground
。
我曾经把GCDWebServer的start()
和stop()
放在viewDidLoad
和viewWillDisappear
中。
现在在 SwiftUI 中,我应该将它们放在哪个等效位置?
我尝试将服务器 init() 放入 scene(_ scene: UIScene, willConnectTo
,并将服务器 deinit() 放入 sceneDidEnterBackground(_ scene:
。
启动应用程序后,服务器成功启动,当我将应用程序推送到后台时,服务器停止了。那很好用。但是当应用程序returns再次到前台时,服务器不会再次启动。
代码:
class BrandViewController: UIViewController {
let mockServer = GCDServer()
let tableView = UITableView()
private let products = ProductAPI.loadProducts()
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.searchController = searchController
self.navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.title = "Search"
view.backgroundColor = .white
tableView.register(ProductCell.self, forCellReuseIdentifier: "productCell")
tableView.dataSource = self
tableView.delegate = self
view.addSubview(tableView)
// Start GCDWebServer
mockServer.initWebServer()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
tableView.frame = view.bounds
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
mockServer.stopWebServer()
}
}
如果您在 sceneDidEnterBackground
上销毁服务器,那么解决方案是将服务器创建(并且,正如我假设的开始)从 scene(_ scene: UIScene, willConnectTo
转移到 sceneWillEnterForeground
。