我以前这样嘲笑UIApplication
在我的应用程序:How to mock UIApplication in Swift?模拟的UIApplication开放的功能在iOS中10
我们现在希望得到的iOS 10台设备使用open(_ url: URL, options: [String : Any] = [:], completionHandler completion: ((Bool) -> Swift.Void)? = nil)
功能openURL(_ url: URL) -> Bool
已被弃用。尽管如此,我似乎无法以这种方式嘲笑这一点。
目前代码
protocol BSApplicationProtocol {
func openURL(url: URL) -> Bool
@available(iOS 10.0, *)
func open(_ url: URL, options: [String : Any], completionHandler completion: ((Bool) -> Swift.Void)?)
}
extension UIApplication: BSApplicationProtocol {
internal func openURL(url: URL) -> Bool {
return openURL(url)
}
@available(iOS 10.0, *)
internal func open(_ url: URL, options: [String : Any], completionHandler completion: ((Bool) -> Swift.Void)?) {
open(url, options: options, completionHandler: completion)
}
}
func openAppSettings(application: BSApplicationProtocol = UIApplication.shared) {
if let settingsURL = URL(string: UIApplicationOpenSettingsURLString) {
if #available(iOS 10.0, *) {
application.open(settingsURL, options: [:], completionHandler: nil)
} else {
_ = application.openURL(url: settingsURL)
}
}
}
当在iOS 10设备上运行时,open(_ url: URL, options: [String : Any] = [:], completionHandler completion: ((Bool) -> Swift.Void)? = nil)
函数被调用,但它最终在UIApplication
扩展类与EXC_BAD_ACCESS
崩溃。
在下面的截图中,您可以看到旧的打开功能是蓝色的,但新的功能是绿色的。这让我觉得我以某种方式错误地引用了该函数。
是否有在哪里我可能是错这里发生什么秘诀?