有没有办法在swift框架中覆盖应用程序委托?

时间:2015-12-09 18:01:46

标签: ios swift uiapplicationdelegate

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

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

问题是UIApplication无法在框架中导入。 有没有办法捕获该事件而无需在应用程序中执行此操作?

Thx!

1 个答案:

答案 0 :(得分:0)

没有通用的方法可以做到这一点。例如,在这种情况下没有发布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处理“打开网址”的位置。

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

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。