gpt4 book ai didi

swift - 框架+应用+扩展的统一openURL

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:31 24 4
gpt4 key购买 nike

我有一个适用于 iOS 8 的 Swift 应用程序,它有一个应用程序组件、一个扩展组件和一个包含大量共享资源(共享 View Controller 、共享 Assets 等)的框架。在框架中的某个时刻,我想要打电话

UIApplication.sharedApplication().openURL(someURL)

但是,如果我在选中“仅允许应用程序扩展 API”时执行此操作,则会出错,因为 UIApplication.sharedApplication() 在扩展中不可用。如果我取消选中该框,我会收到一条警告,指出将框架包含在扩展中可能不安全,我担心这可能会导致提交时间被拒。

如果此代码仅用于扩展,我会使用如下代码:

extensionContext.openURL(someURL, completionHandler: nil)

…但这在独立应用程序中不起作用,仅在扩展程序中起作用。

修改我的代码以确保扩展程序永远不会调用 UIApplication.sharedApplication().openURL() 行是微不足道的,并且应用程序永远不会调用 extensionContext.openURL() 行,但事实并非如此清除错误 - 仅扩展 API 框架中存在 UIApplication.sharedApplication() 会导致错误。

那么,在我开始研究 hack 之前,是否有一个干净的解决方案可以让我调用 openURL 并采取正确的操作,而不会导致编译错误?

提前致谢!

最佳答案

声明一个全局 😱,可选 闭包变量以在您的共享框架中打开 URL。

public openURL: (NSURL->())? = nil

然后在您的应用委托(delegate)的 application:didFinishLaunching:... 中设置它,如下所示:

openURL = { UIApplication.sharedApplication().openURL($0) }

然后你可以像这样从任何地方调用openURL:

openURL?(NSURL(string: "http://stackoverflow.com/")!)

此声明不会对您的扩展产生任何影响,因为您从未在应用扩展过程中设置过 openURL

关于swift - 框架+应用+扩展的统一openURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25526546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com