gpt4 book ai didi

ios - 将 NS_OPTIONS 枚举 (UIRemoteNotificationType) 位掩码转换为 NSString 分隔值

转载 作者:行者123 更新时间:2023-11-28 22:20:23 24 4
gpt4 key购买 nike

我想将 UIRemoteNotificationType 转换为字符串以用于分析跟踪。像“角标(Badge):声音:警报”之类的东西。使用 Xcode 5 中提供的最新 CLANG Objective-C 语言功能执行此操作的首选方法是什么?

我已经看到许多关于使用各种技术处理单值 NSEnum 值的其他问题,特别是 here , 和 here .但是,这些都没有讨论包含多个位掩码值的基于 NS_OPTION 的枚举的解决方案。

我最初的想法是,我需要一个 NSDictionary 来映射值,并需要一个 NSArray 来在迭代后收集它们,有没有更优雅的方法来处理这个问题?

最佳答案

这是我想出的解决方案,相当简洁,但仍然类型特定且对 future 的扩展很脆弱:

from UIApplication.h typedef NS_OPTIONS(NSUInteger, UIRemoteNotificationType) { UIRemoteNotificationTypeNone = 0, UIRemoteNotificationTypeBadge = 1 << 0, UIRemoteNotificationTypeSound = 1 << 1, UIRemoteNotificationTypeAlert = 1 << 2, UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3, } NS_ENUM_AVAILABLE_IOS(3_0);

NSString* remoteNotificationTypesToString(UIRemoteNotificationType notificationTypes)
{
NSArray *remoteNotificationTypeStrs = @[@"Badge", @"Sound", @"Alert", @"NewsStand"];
NSMutableArray *enabledNotificationTypes = [[NSMutableArray alloc] init];

#define kBitsUsedByUIRemoteNotificationType 4
for (NSUInteger i=0; i < kBitsUsedByUIRemoteNotificationType; i++) {
NSUInteger enumBitValueToCheck = 1 << i;
if (notificationTypes & enumBitValueToCheck)
[enabledNotificationTypes addObject:[remoteNotificationTypeStrs objectAtIndex:i]];
}

NSString *result = enabledNotificationTypes.count > 0 ?
[enabledNotificationTypes componentsJoinedByString:@":"] :
@"NotificationsDisabled";

return result;
}

UIRemoteNotificationType notificationTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
NSString *notificationTypesStr = remoteNotificationTypesToString(notificationTypes);
NSLog(@"Notification types: %@", notificationTypesStr);

关于ios - 将 NS_OPTIONS 枚举 (UIRemoteNotificationType) 位掩码转换为 NSString 分隔值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com