83

AppDelegateとがSwiftUIから削除されたので、 ex の Firebase構成でSceneDelegate使用していたコードをどこに配置すればよいでしょうか?SceneDelegateAppDelegate

だから私は現在私の中にこのコードを持っていますAppDelegate:

このコードをどこに置くべきですか?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    
    FirebaseConfiguration.shared.setLoggerLevel(.min)
    FirebaseApp.configure()
    return true
}
4

6 に答える 6

40

その種のコードを app デリゲートにまったく配置しないでください。そうしないと、 Massive App Delegateに直面することになります。代わりに、コードをより意味のある部分にリファクタリングし、適切な部分を適切な場所に配置することを検討する必要があります。この場合、必要なのは、アプリの準備ができたらコードがこれらの関数を 1 回だけ実行していることを確認することだけです。したがって、このinit方法は素晴らしいものになる可能性があります。

@main
struct MyApp: App {
    init() {
        setupFirebase()
    }

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

private extension MyApp {
    func setupFirebase() {
        FirebaseConfiguration.shared.setLoggerLevel(.min)
        FirebaseApp.configure()
    }
}

AppDelegate ?

独自のカスタム クラスを作成し、それを として割り当てることができますdelegate。ただし、割り当て前に発生するイベントでは機能しないことに注意してください。例えば:

class CustomDelegate: NSObject, UIApplicationDelegate {
    static let Shared = CustomDelegate()
}

以降:

UIApplication.shared.delegate = CustomDelegate.Shared

通知の監視

ほとんどのAppDelegateメソッドは、新しいクラスを定義する代わりに、手動で監視できる通知を実際に監視しています。例えば:

NotificationCenter.default.addObserver(
    self,
    selector: #selector(<#T##@objc method#>),
    name: UIApplication.didBecomeActiveNotification,
    object: nil
)

ネイティブAppDelegateラッパー

@mainapp デリゲートを構造体に直接注入できます。

@UIApplicationDelegateAdaptor(CustomDelegate.self) var appDelegate

注: 使用AppDelegate

AppDelegate を追加すると、デフォルトのマルチプラットフォーム サポートが無効になり、プラットフォームを手動で確認する必要があることに注意してください。

于 2020-07-13T16:17:44.310 に答える