有没有办法快速覆盖框架中的应用程序委托?

Posted

技术标签:

【中文标题】有没有办法快速覆盖框架中的应用程序委托?【英文标题】:Is there a way to override an app delegate in a framework in swift? 【发布时间】:2015-12-09 18:01:45 【问题描述】:

我目前正在用 Swift 开发一个框架,我必须检查是否 应用程序已通过 url 方案打开。 为此,我在开发应用程序时将其添加到我的 appdelegate 文件中:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool 
    print("went back")
    return true

问题是 UIApplication 不能导入到框架中。 有没有办法无需在应用程序中就可以捕捉到该事件?

谢谢!

【问题讨论】:

【参考方案1】:

没有通用的方法可以做到这一点。例如,在这种情况下没有发布 ios 默认通知并且可以观察到。

我看到了两种实现方式:

1) 重定向方法调用(可能就像您所做的那样)。 VK SDK 以这种方式实现重定向。

例如:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool
    
        let result = MySDK.sharedInstance().openURL(url, options: options)
        reutrn result
    

优点:明确,开发人员会知道您的 SDK 处理“打开 url”的位置。

缺点:您需要开发人员知道他们需要添加这行代码

2) 创建 Base App Delegate(Facebook SDK 使用此方法)。因此,您创建实现此方法的基类并强制开发人员将其用作AppDelegate 的超类

class BaseAppDelegate: UIResponder, UIApplicationDelegate 

        func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool
        
            let result = MySDK.sharedInstance().openURL(url, options: options)
            reutrn result
        


class MyAppDelegate: BaseAppDelegate 

 // Implement some custom app delegate


优点:开发人员更容易实现。

缺点:不像之前的方法那么明确,如果这个方法会被MyAppDelegate覆盖,就需要调用super。

【讨论】:

以上是关于有没有办法快速覆盖框架中的应用程序委托?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法覆盖当用户单击 CListCtrl 中的复选框时调用的处理程序? (MFC)

有没有办法让 App_Data 中的文件在发布时不会覆盖较新的文件?

有没有办法覆盖角度核心库中的角度组件初始化步骤来为每个组件的初始化执行一些代码

如何在 Swift 中的框架内创建委托/回调? [复制]

SQL 加载程序行分隔符覆盖

在框架中覆盖故事板中的图像