#swiftui #nsnotificationcenter
#swiftui #nsnotificationcenter
Вопрос:
Я начинаю играть с SwiftUI. Я нашел код, который позволяет мне присоединять onReceive()
обработчик к объекту представления, настроенный для ответа на NotificationCenter
такие сообщения, как UIApplication.willEnterForegroundNotification
.
Тем не менее, я хочу создать одинаковую сборку приложений на базе кода для iOS и Mac. Я добавил цель macOS в свой проект и получил contentView, работающий на обеих платформах. Я бы предпочел не добавлять кучу #if os(macOS)
или #if os(iOS)
условно скомпилированный код к моему ContentView
.
Целевой шаблон iOS создает объект приложения SwiftUI:
@main
struct SwiftUI_CounterButtonApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
Похоже, что у цели Mac нет такого объекта приложения.
Я хотел бы поместить свой код, который обрабатывает уведомления переднего плана на уровне приложения, а не на уровне contentView.
Можно ли добавить onReceive()
обработчик к объекту iOS App
?
И каким будет эквивалент для цели Mac OS? Все, что я вижу в цели Mac OS, — это код Swift, который создает и устанавливает мой contentView. Я не вижу кода SwiftUI в целевой программе macOS.
Ответ №1:
Вы можете использовать один и тот же целевой объект как для iOS, так и для macOS. Просто проверьте macOS
в разделе General
-> Deployment Info
.
Затем вы можете использовать один и тот же код для обеих платформ:
@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.onReceive(NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification)) { _ in
print("active")
}
}
}
}