我正在try 构建自己的库,我想知道如果某个布尔值为真,是否有办法在我的代码中只实现一个方法.它类似于@Available(iOS 14,*),但使用在我的类中声明的布尔值.

问题出在推动措施的实施上.我的主AppDelegate中有一个变量,我想用继承来配置它.我有一个布尔值‘ush NotificationsEnabled’,它确定我是否希望在此项目中进行推送:

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

但我不能使用didReceiveRemoteNotification方法执行此逻辑,因为我必须对其进行硬编码.在实现时(尽管它从未被调用),Xcode在日志(log)中删除以下文本:

*您已经实现了-[application:didReceiveRemoteNotification:fetchCompletionHandler:],,但是您仍然需要在您的Info.plist中支持的UIBackEarth Modes列表中添加远程通知. *

这实际上是正确的,该方法正在被实现,并且Xcode不必知道它是否将被使用.

我想知道是否有可能做我想要的逻辑,所提到的方法只有在布尔值为真的情况下才会实现.或者,如果有比使用布尔值更正确的方法,这可能是我应该 Select 的 Select .

致以问候,并感谢所有人!

推荐答案

这不能用运行时值来实现(如果在程序运行期间更改了pushNotificationsEnabled,这将如何工作?)您需要的是一个编译时的值,它受#if directive的支持.

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

然后在Xcode中添加PUSH_NOTIFICATIONS_ENABLEDSWIFT_ACTIVE_COMPILATION_CONDITIONS,或使用Package.swft中的.define()设置.

Swift相关问答推荐

多个提取来计算核心数据中的记录

SWIFT Vapor控制台应用程序-操作无法完成.权限被拒绝

了解SWIFT中的任务行为

如何避免切换视图递归onChange调用SwiftUI

防止带有背景的文本扩展到 maxWidth

将每个枚举 case 与 Swift 中的一个类型相关联

从 Swift Vapor Server 中调用 ShazamKit

为什么 NumberFormatter 在 Swift 中将 19,999,999,999,999,999 格式化为 20,000,000,000,000,000?

快速更改tableView中的数据

快速递归:函数与闭包

如何从数据中读取以空结尾的字符串?

将 struct 作为泛型类型传递并访问该泛型类型属性

`IndexSet` 永远不会是空的?

获取 SwiftUI 中 Binding 的值更改更新

判断 Swift 程序是否正在输出到终端

Swift:连接两个数组而不重复共享后缀/前缀

如何使被拖动的对象成为前景(foreground)对象

快速在 LLDB 中使用 po

如何在 SwiftUI 中的一个视图上显示两个alert ?

如何将 Int 拆分为其各个数字?