我正在学习UserNotifications框架,并有以下方法来响应用户对通知的操作。
func userNotificationCenter (_ pNotificationCenter: UNUserNotificationCenter, didReceive pResponse: UNNotificationResponse, withCompletionHandler pCompletionHandler: @escaping () -> Void) -> Void {
...
}
这在iOS和iPadOS中工作得很好,但是documentation说这个委托方法不适用于tvOS --这让我相信通知横幅不能在tvOS中显示--这是可以的。
但问题是,我如何使它在tvOS上编译呢?
error: 'UNNotificationResponse' is unavailable in tvOS
...
error: cannot override 'userNotificationCenter' which has been marked unavailable
我尝试使用@available属性,它只在iOS和iPadOS 10.0及以上版本中包含此方法。
@available(iOS 10.0, *)
但是这不起作用。我仍然得到同样的错误。宏可以工作,但是我使用@available的方式有什么问题吗?
如何使用@available选择性地禁用tvOS的此功能?
**Update 1:**即使我像下面这样 Package 空函数,我仍然得到同样的错误。
#if os(tvOS)
func userNotificationCenter (_ pNotificationCenter: UNUserNotificationCenter, didReceive pResponse: UNNotificationResponse, withCompletionHandler pCompletionHandler: @escaping () -> Void) -> Void {
}
#endif
更新2:更新中的愚蠢错误1.如果我需要上述代码仅适用于iOS和iPadOS,我应该使用
#if os(iOS)
而不是
#if os(tvOS)
2条答案
按热度按时间wz8daaqr1#
如果你有os(tvOS),你声明函数,但你只想在没有os(tvOS)的情况下声明函数。在条件编译中,你没有直接否定。所以一个解决方案是:
因此,只有在没有tvOS的情况下才声明该函数。
Here你可以找到更多关于条件编译的例子,但是你可以在web上找到更多的例子。
wkyowqbh2#
对于使用属性@available选择性地禁用tvOS上的功能,将unavailable on tvOS,unavailable添加到@available属性。