iOS 10 中模拟 UIApplication 打开函数
Mock UIApplication open function in iOS 10
我以前在我的应用程序中这样嘲笑 UIApplication
:
我们现在想要 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
扩展 class 中崩溃 EXC_BAD_ACCESS
.
在下面的截图中,您可以看到旧的打开功能是蓝色的,而新的是绿色的。这让我觉得我在某种程度上错误地引用了函数。
有什么提示可以告诉我哪里可能出错吗?
解决方案是为函数(在 BSApplicationProtocol
中)指定一个不同的名称。
open()
--> 例如 open2()
。 (注意:你可能应该想出一个比这更好的函数名)
显然,您必须更改 extension
中的函数名称以及从我的 openAppSettings
函数中调用的函数名称。
我不太清楚为什么我不必命名 openURL
不同的东西。我看到这两者之间的唯一区别是 OpenURL
returns a Bool
和新的 iOS 10 版本具有默认值。
我以前在我的应用程序中这样嘲笑 UIApplication
:
我们现在想要 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
扩展 class 中崩溃 EXC_BAD_ACCESS
.
在下面的截图中,您可以看到旧的打开功能是蓝色的,而新的是绿色的。这让我觉得我在某种程度上错误地引用了函数。
有什么提示可以告诉我哪里可能出错吗?
解决方案是为函数(在 BSApplicationProtocol
中)指定一个不同的名称。
open()
--> 例如 open2()
。 (注意:你可能应该想出一个比这更好的函数名)
显然,您必须更改 extension
中的函数名称以及从我的 openAppSettings
函数中调用的函数名称。
我不太清楚为什么我不必命名 openURL
不同的东西。我看到这两者之间的唯一区别是 OpenURL
returns a Bool
和新的 iOS 10 版本具有默认值。