首页 > 解决方案 > Swift:委托方法不会触发

问题描述

我试图根据用户的设备是否在线来触发另一个视图控制器中的方法。

该方法从ConnectionService.swift调用,设置如下:

protocol ConnectionServiceDelegate: class {
func didChangeStatus()
}

weak var delegate: ConnectionServiceDelegate?

    func updateConnectionStatus(_ status: Connectivity.Status) {
    switch status {
    case .connected, .connectedViaWiFi, .connectedViaCellular:
        updateLabelWith(connectionStatus: .connected)

    case .notConnected, .connectedViaWiFiWithoutInternet, .connectedViaCellularWithoutInternet:
        updateLabelWith(connectionStatus: .disconnected)
    }

    delegate?.didChangeStatus()
    }

我试图触发该方法的 VC 在 vi​​ewDidLoad() 中设置了这个:

    override func viewDidLoad() {
    super.viewDidLoad()
    stackView.customPadding(BaseFlightLookupViewController.submitButtonVerticalPadding, after: date)


     connectionService = ConnectionService()
     connectionService?.delegate = self
}

然后在扩展中:

extension RetrieveCompletedOrderViewController: ConnectionServiceDelegate {
func didChangeStatus() {
    print("Delegate triggered")
}

}

现在我知道委派类是正确的,但为什么我在这个 RetrieveCompletedOrderViewController 中的方法没有被触发?

编辑:

updateConnectionStatus 调用如下:

    private func prepareConnectivityListener() {
    let connectivityChanged: (Connectivity) -> Void = { [weak self] connectivity in
        self?.updateConnectionStatus(connectivity.status)
    }

    connectivity.whenConnected = connectivityChanged
    connectivity.whenDisconnected = connectivityChanged
    connectivity.startNotifier(queue: queue)
}

这个方法在这里调用:

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    DispatchQueue.main.async { [weak self] in
        self?.prepareUI()
    }
    prepareConnectivityListener()
    return true
}

标签: swiftxcodedelegatesprotocolsdelegation

解决方案


推荐阅读