You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS Flutter中如何将实例方法作为函数/闭包类型回调?Swift代码求助

FlutterDownloader iOS端AppDelegate.swift代码修正方案

原代码存在的问题及修正措施:

  • 未遵循UNUserNotificationCenterDelegate协议
    原代码尝试将self赋值给通知中心代理,但类未声明遵循该协议,导致类型转换无效。需在类声明中添加该协议。

  • 强制解包存在崩溃风险
    原注册方法里用!强制解包插件注册器,找不到插件时会直接崩溃,改用可选绑定处理更安全。

  • 冗余导入优化
    FirebaseCore已包含在Firebase包中,可移除冗余导入。


修正后的完整代码:

import UIKit
import Flutter
import Firebase
import flutter_downloader

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate, MessagingDelegate, UNUserNotificationCenterDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    FirebaseApp.configure()
    GeneratedPluginRegistrant.register(with: self)
    FlutterDownloaderPlugin.setPluginRegistrantCallback(registerPlugins)
    Messaging.messaging().delegate = self
    
    if #available(iOS 10.0, *) {
      // 直接赋值self,无需强制转换
      UNUserNotificationCenter.current().delegate = self
      let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
      UNUserNotificationCenter.current().requestAuthorization(
        options: authOptions,
        completionHandler: { _, _ in }
      )
    }
    
    application.registerForRemoteNotifications()
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }

  private func registerPlugins(registry: FlutterPluginRegistry) {
    // 用guard let避免强制解包崩溃
    guard let registrar = registry.registrar(forPlugin: "FlutterDownloaderPlugin") else {
      return
    }
    if !registry.hasPlugin("FlutterDownloaderPlugin") {
      FlutterDownloaderPlugin.register(with: registrar)
    }
  }
}

修正说明:

  1. 类声明添加UNUserNotificationCenterDelegate,确保通知代理回调能正常触发,无需类型转换。
  2. 使用guard let安全获取注册器,避免找不到插件时崩溃。
  3. 移除冗余的FirebaseCore导入,简化代码结构。

内容的提问来源于stack exchange,提问作者Muhammad Umair Saqib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:57:51