'How to use UIApplicationDelegateAdaptor as ObservableObject?
In my iOS 14 App
, I can register the legacy AppDelegate
by doing this:
@main
struct MyApp: App {
#if os(iOS)
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
#endif
var body: some Scene {
...
}
}
#if os(iOS)
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
SomeSDK.configure(with: launchOptions)
return true
}
}
#endif
However, I noticed in the documentation you can make UIApplicationDelegateAdaptor
an ObservableObject
then it will inject it in the EnvironmentObject
:
...delegate will be placed in the Environment and may be accessed by using the
@EnvironmentObject
property wrapper in the view hierarchy.
I couldn't find any example of how this would work. What is the syntax to making this work as an ObservableObject
?
Solution 1:[1]
Here is a demo of usage
- Confirm
AppDelegate
toObservableObject
class AppDelegate: NSObject, UIApplicationDelegate, ObservableObject {
@Published var value: String = ""
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
self.value = "test" // in any callback use your published property
return true
}
}
- Register your
AppDelegate
as adaptor as you did
@main
struct Testing_SwiftUI2App: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
// ... other code
- Declare
@EnvironmentObject
in some of your view, where needed
struct ContentView: View {
@EnvironmentObject var appDelegate: AppDelegate // << inject
var body: some View {
Text("Value: \(appDelegate.value)") // << use
}
}
Tested with Xcode 12 / iOS 14.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |