- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将 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/
我有一个很大的枚举(为了透明起见,有 63 个值),我现在正在基于该枚举创建一个 NS_Options 位标志。有没有一种方法可以让我编写它以使其灵活? 我对硬编码的主要担忧是: 如果我添加/删除
在 C 的 objective-c 变体中,存在 NS_OPTIONS 以帮助验证位掩码。但它似乎有一个固有的缺陷。如果我需要定义一个表示所有位的按位或的值,例如FubarAllOptions 有些人
我正在尝试实现以下 typedef typedef NS_OPTIONS (NSInteger, MyCellCorners) { MyCellCornerTopLeft, MyCel
这是我想做的。我有一个简单的 NS_OPTIONS 设置,例如 typedef NS_OPTIONS(NSUInteger, BuildingsPresent) { NoBuildings
在下一个案例中我尝试使用 NS_OPTIONS: typedef NS_OPTIONS(NSUInteger, FZAnimalType) { FZAnimalTypeNone = 0,
简短介绍一下我想用它实现的目标: 我有一个自定义的UIView,我想让箭头可见,例如在底部和左侧。我认为可以采用与 UIViewAutoresizing 相同的方式执行此操作。 所以我为我的自定义 V
我在 Xcode5 中使用 clang 预处理了以下代码。 typedef NS_ENUM(NSInteger, MyStyle) { MyStyleDefault, MyStyleC
我在 objc 中定义了以下枚举: typedef NS_OPTIONS(NSInteger, RKRequestMethod) { RKRequestMethodGET =
我在 Objective-C .h 文件中定义了一个 NS_OPTIONS: typedef NS_OPTIONS (NSInteger, Options){ OptionsOne,
在 Apple 关于与 C API 交互的文档中,它们描述了将标记为 NS_ENUM 的 C 样式枚举导入为 Swift 枚举的方式。这是有道理的,因为 Swift 中的枚举很容易作为 enum 值类
上下文 我正在使用 NS_OPTIONS 宏来创建位掩码。我已经为它分配了一种类型的 NSInteger 并且因为我是在 64 位平台上构建的,所以应该给我总共 63 个“槽”来使用(64 位少一位签
在 Objective-C 中创建具有特定类型的枚举的正确方法是什么? NS_ENUM 和 NS_OPTIONS 是如何工作的? NS_OPTIONS 用于 mask ,例如 NSAutoresizi
在 Apple 关于与 C API 交互的文档中,它们描述了将标记为 NS_ENUM 的 C 样式枚举导入为 Swift 枚举的方式。这是有道理的,因为 Swift 中的枚举很容易作为 enum 值类
如何在Objective-C中转发声明NS_OPTIONS? NS_ENUMS 的相关 SO 问题:Forward-declare enum in Objective-C Apple Dev Foru
我必须在我的 Swift 项目中使用 Objective-C 静态库。除了在 Objective-C 头文件中定义的 NS_OPTIONS 枚举外,其他一切正常,如下所示: #import type
我想将 UIRemoteNotificationType 转换为字符串以用于分析跟踪。像“角标(Badge):声音:警报”之类的东西。使用 Xcode 5 中提供的最新 CLANG Objective
Swift 中的 switch 语句更具表现力。我想知道这是否可能: 让我们以 UIViewAutoresizing 为例。它在 Objective-C 中定义如下: typedef NS_OPTIO
我在 Objective C 中声明了枚举 NS_OPTION typedef NS_OPTIONS(NSUInteger, PHRendererType) { PHRendererT
我是一名优秀的程序员,十分优秀!