仅当布尔值为真时才执行方法(application:didReceiveRemoteNotification)

问题描述 投票:0回答:1

我正在尝试构建自己的库,我想知道是否有一种方法可以只在我的代码中实现某个布尔值为真时的方法。它将类似于@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 支持的 UIBackgroundModes 列表中添加“remote-notification”。 *

其实是对的,方法正在执行,Xcode不用知道到底要不要用

我想知道是否可以执行我想要的逻辑,提到的方法仅在布尔值为真时才执行。或者,如果有比使用布尔值更正确的方法来做到这一点,那可能是我应该选择的选项。

问候,感谢所有人!

swift xcode push-notification implements didreceiveremotenotification
1个回答
0
投票

这不能用运行时值来完成(如果

pushNotificationsEnabled
在程序运行期间被更改,这将如何工作?)你想要的是一个编译时值,它由
#if
指令支持
.

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

然后您可以在 Xcode 中将

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

© www.soinside.com 2019 - 2024. All rights reserved.