swift - swift 3中的后台任务
问题描述
什么相当于对后台任务的选择器做出响应?我在 Objective-C 中找到了代码。我试图在 Swift 中做到这一点。
这是Objective-C代码:
if ([application respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)]){
bgTaskId = [application beginBackgroundTaskWithExpirationHandler:^{
})
SWIFT代码:
if application.responds(to: #selector(self.beginBackgroundTaskWithExpirationHandler)) {
bgTaskId = application.beginBackgroundTask(expirationHandler: {() -> Void in
print("background task \(UInt(bgTaskId!)) expired")
})
这是说BackgroundTaskManager 没有成员'beginBackgroundTaskWithExpirationHandler'。
我们可以在 Swift 3 中复制的确切内容是什么?
解决方案
除非您尝试支持 iOS 3 或更早版本,否则无需检查选择器是否存在,因为它是在 iOS 4.0 中添加的。
但 Swift 选择器将是:beginBackgroundTask(expirationHandler:)
.
这是尝试将 Objective-C API 转换为 Swift 时的一个简单技巧。在 Xcode 或在线获取 API 文档。选择 Objective-C API。找到您要转换的方法。然后将文档切换到 Swift API。在这种情况下,您现在将看到相同的方法,但在 Swift 中。
推荐阅读
- mongodb - 带有聚合框架的 MongoDB 过滤器
- javascript - Google Maps Javascript API:信息窗口在同一位置打开,尽管有多个标记
- angular - Mat-button-toggle 在我的应用程序中默认为 yes
- ios - 播放视频时不显示 MPNowPlayingInfoCenter,播放音频时显示
- android - 添加时标记抛出错误,如何解决这个问题?
- php - PHP if条件错误语法错误在服务器中
- python - Python:如何查找 mpl_toolkits 的版本号?
- r - 如何根据连接条件从 R 中的两个不同数据框中添加两列
- apache-flink - 将对象节点转换为 json 节点
- ios - 不能符合来自objective-c的快速委托协议