xcode 仅当boolean为true时实现方法(application:didReceiveRemoteNotification)

lx0bsm1f  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(144)

我正在尝试构建自己的库,我想知道是否有一种方法可以只在某个布尔值为true时在我的代码中实现一个方法。它类似于@available(iOS 14,*),但使用在我的类中声明的布尔值。
问题出现在推送的实现中。我在我的主AppDelegate中有一个变量,我想用继承来配置它。我有一个布尔值'pushNotificationsEnabled',它可以建立我是否想在这个项目中推送:

if pushNotificationsEnabled {
    UNUserNotificationCenter.current().requestAuthorization(options: [.sound, .alert, .badge], completionHandler: { (_, _) in })
    application.registerForRemoteNotifications()
    UNUserNotificationCenter.current().delegate = self        
}

但是我不能用didReceiveRemoteNotification方法来做这个逻辑,因为我必须硬编码它。在实现时(尽管它从未被调用),Xcode会在日志中删除以下文本:

  • 您已经实现了-[ application:didReceiveRemoteNotification:fetchCompletionHandler:],但是您仍然需要将“远程通知”添加到Info. plist中支持的UI背景模式列表中。*

它实际上是正确的,方法正在实现,Xcode不必知道它是否会被使用。
我想知道是否有可能做我想要的逻辑,如果布尔值为真,所提到的方法才能实现。或者如果有一些比布尔值更正确的方法,这可能是我应该采取的选择。
问候,并感谢所有!

bxfogqkk

bxfogqkk1#

这不能用运行时值来完成(如果pushNotificationsEnabled在程序运行期间被更改了,这将如何工作?)您需要的是一个编译时值,它由#if指令支持。

#if PUSH_NOTIFICATIONS_ENABLED
   ... push notification code ...
#endif

然后在Xcode中将PUSH_NOTIFICATIONS_ENABLED添加到SWIFT_ACTIVE_COMPILATION_CONDITIONS,或者使用Package.swift中的.define()设置。

相关问题