【问题标题】:SwiftUI: what is the equivalent stuff with viewDidLoad and viewWillDisappearSwiftUI:与 viewDidLoad 和 viewWillDisappear 等价的东西是什么
【发布时间】:2020-10-18 12:53:32
【问题描述】:

我以前把GCDWebServer的start()stop()放在viewDidLoadviewWillDisappear里面。

现在在 SwiftUI 中,我应该将它们放在什么位置? 我尝试将服务器 init() 放入 scene(_ scene: UIScene, willConnectTo,并将服务器 deinit() 放入 sceneDidEnterBackground(_ scene:

启动应用程序后,服务器启动成功,当我将应用程序推送到后台时,服务器停止。那工作得很好。但是当应用再次回到前台时,服务器并没有重新启动。

代码:

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()
    }
}

【问题讨论】:

    标签: swiftui gcdwebserver


    【解决方案1】:

    如果您在 sceneDidEnterBackground 上销毁您的服务器,那么解决方案是将服务器创建(并且,我假设开始)从 scene(_ scene: UIScene, willConnectTo 移动到 sceneWillEnterForeground

    【讨论】:

    • 感谢您的回复。我刚刚做了一个快速测试,这个解决方案有效!还尝试将服务器 init()、deinit() 放入 SwiftUI 入口页面中的onAppearonDisappear。它也有效,所以这是更好的或正确的方法。对我来说,我不想将服务器操作代码放在 UI 中。
    • onAppear/onDisappear 可能并不总是按预期调用(例如,在导航期间等),因此它不适合与服务器一起操作(在一般情况下)。在某些特定情况下,由您决定。
    猜你喜欢
    • 2022-01-10
    • 2018-05-26
    • 2014-10-14
    • 2012-12-30
    • 2020-07-21
    • 1970-01-01
    • 2021-09-17
    • 2018-06-01
    • 2018-01-07
    相关资源
    最近更新 更多