ios 使用@available排除tvOS的通知方法

gr8qqesn  于 2023-04-22  发布在  iOS
关注(0)|答案(2)|浏览(147)

我正在学习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)
wz8daaqr

wz8daaqr1#

如果你有os(tvOS),你声明函数,但你只想在没有os(tvOS)的情况下声明函数。在条件编译中,你没有直接否定。所以一个解决方案是:

#if os(tvOS)
    
#warning("Not implemented in tvOS") // or if you want #error(...)    
        
#else
        
func userNotificationCenter (_ pNotificationCenter: UNUserNotificationCenter, didReceive pResponse: UNNotificationResponse, withCompletionHandler pCompletionHandler: @escaping () -> Void) -> Void {
....

}

因此,只有在没有tvOS的情况下才声明该函数。
Here你可以找到更多关于条件编译的例子,但是你可以在web上找到更多的例子。

wkyowqbh

wkyowqbh2#

对于使用属性@available选择性地禁用tvOS上的功能,将unavailable on tvOS,unavailable添加到@available属性。

@available(iOS 10.0, *, unavailableIn: .tvOS)

相关问题