相关疑难解决方法(0)

打印枚举,NSLog的字符串表示形式

我正在尝试NSLog我的一些枚举.例如,这段代码打印枚举的整数表示,但我希望它输出实际的字符串名称,在本例中为MON.我怎样才能做到这一点?

#import <Foundation/Foundation.h>
int main(void)
{
    typedef enum {
        SUN,
        MON,
        TUES
    } DAYS;

  DAYS d = MON;
  NSLog(@"%@", d);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

enums objective-c

17
推荐指数
2
解决办法
1万
查看次数

如何以人类可读的形式显示OptionSet值?

Swift具有OptionSet类型,它基本上将集合操作添加到C样式位标志.Apple在他们的框架中广泛使用它们.示例包括选项参数animate(withDuration:delay:options:animations:completion:).

从好的方面来说,它可以让你使用干净的代码:

options: [.allowAnimatedContent, .curveEaseIn]
Run Code Online (Sandbox Code Playgroud)

但是,也存在不利因素.

如果我想显示一个指定的值OptionSet,似乎没有一个干净的方法来做它:

let options: UIViewAnimationOptions = [.allowAnimatedContent, .curveEaseIn]
print("options = " + String(describing: options))
Run Code Online (Sandbox Code Playgroud)

显示非常无用的消息:

options = UIViewAnimationOptions(rawValue:65664)

其中一些位字段的文档将常量表示为二次幂值:

flag0    = Flags(rawValue: 1 << 0)
Run Code Online (Sandbox Code Playgroud)

但是我的示例OptionSet的文档UIViewAnimationOptions并没有告诉你关于这些标志的数值的任何信息,并且从十进制数中找出位并不是直截了当的.

题:

是否有一些干净的方法将OptionSet映射到选定的值?

我想要的输出是这样的:

options = UIViewAnimationOptions([.allowAnimatedContent,.curveEaseIn])

但是如果没有一堆杂乱的代码需要我为每个标志维护一个显示名称表,我想不出办法做到这一点.

(我有兴趣为我自己的代码中创建的系统框架和自定义OptionSet执行此操作.)

Enums允许您同时拥有枚举的名称和原始值,但这些不支持使用OptionSets获得的set函数.

ios swift optionsettype

11
推荐指数
1
解决办法
1089
查看次数

标签 统计

enums ×1

ios ×1

objective-c ×1

optionsettype ×1

swift ×1