Есть ли альтернатива UIApplication.didBecomeActiveNotification с #selector? - PullRequest
0 голосов
/ 04 августа 2020

Мне нужно выполнить от segue до modal из моего tabbar controller. Это не сработает, поскольку есть начальный tab, который переопределяет модальный переход (я думаю, модальный не будет отображаться). И я не могу выполнить segue в начальном tab, поскольку разные продукты targets имеют разные начальные tabs, и было бы беспорядочно иметь один и тот же код в нескольких местах.

В любом случае, я решил это с помощью

NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)

@objc func applicationDidBecomeActive(notification: Notification) {
    performSegue(withIdentifier: "Segue", sender: nil)
}

Отлично работает. Но я не хочу использовать этот старый код @objc. Разве нет современного быстрого способа сделать это? Я нормально использую UIApplication.didBecomeActiveNotification, но я хочу отказаться от использования #selector и @objc.

1 Ответ

1 голос
/ 04 августа 2020

Если вы настроили таргетинг на iOS 13+, вы можете использовать Combine для просмотра уведомлений NotificationCenter без использования селекторов. Для этого можно использовать функцию publisher(for:) из NotificationCenter.

var subscriptions = Set<AnyCancellable>()
let notificationPublisher = NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification)
notificationPublisher.sink { _ in performSegue(withIdentifier: "Segue", sender: nil) }.store(in: &subscriptions)
...