如何使用“typedef NS_ENUM”在一个 .h 文件中定义多个变量类型

2024-04-14

我用过typedef NS_ENUM重新组织旧代码中的数据常量。使用方法在这里找到 https://stackoverflow.com/a/42009056/2348597 every typedef被声明在一个单一的.h可以导入到项目中任何类的文件。 .h 文件的内容包含在发送给编译器的消息中。这非常适合int变量。

MYCharacterType.h

    #ifndef MYCharacterType_h
    #define MYCharacterType_h 

    typedef NS_ENUM(NSInteger, MARGIN)
    {
        MARGIN_Top                          =  10,
        MARGIN_Side                         =  10,
        MARGIN_PanelBaseLine                =   1
    };
    ...
    #endif /* SatGamEnumType_h */

但是当我尝试包含时 Xcode 会抱怨float变量

“非整数类型‘NSNumber’是无效的基础类型’

e.g.

    typedef NS_ENUM(NSNumber, LINE_WIDTH) {
        LINE_WIDTH_Large                    = 1.5,
        LINE_WIDTH_Medium                   = 1.0,
        LINE_WIDTH_Small                    = 0.5,
        LINE_WIDTH_Hairline                 = 0.25
    };

无论我是否使用,我都会收到相同的消息NSValue or NSNumber所以我怀疑typedef NS_ENUM不是定义的方式float变量(或者至少是我使用它的方式)。

该方法在这个答案中 https://stackoverflow.com/a/4932351/2348597只允许我做我已经在一个文件中组织的事情,但不提供一种重新组织的方法float同一文件中的变量。有人可以解释一下如何做到这一点,以便所有变量都定义在一个中.h文件无论其类型如何?谢谢

SOLUTION

这是rmaddy 回答了 https://stackoverflow.com/a/44252396/2348597在我以不同的方式处理这个问题之后。


在一个枚举中定义不同的枚举.h..就像只添加一个文件一样。

typedef NS_ENUM(NSInteger, MARGIN)
{
    MARGIN_Top                          =  10,
    MARGIN_Side                         =  10,
    MARGIN_PanelBaseLine                =   1
};


typedef NS_ENUM(long, ENUM_2)
{
    ENUM_2_1    = 10,
    ENUM_2_2    = 20,
    ENUM_2_3    = 30,
};

typedef NS_ENUM(long, ENUM_3)
{
    ENUM_3_1    = 10,
    ENUM_3_2    = 20,
    ENUM_3_3    = 30,
};

// And so on as many as you want

你的第二个问题,枚举只能是整数数据类型,例如,int, long, long long, unsigned int, short等等...您不能使用任何非整数类型,例如float or double或者甚至没有任何客观的 c 类型。

您可以像这样对浮点值进行枚举映射https://stackoverflow.com/a/8867169/1825618 https://stackoverflow.com/a/8867169/1825618

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用“typedef NS_ENUM”在一个 .h 文件中定义多个变量类型 的相关文章

随机推荐

  • 按下操作按钮之前加载微调器

    下面是我放置旋转器加载的示例应用程序 但问题是 即使在按下操作按钮之前 旋转器就已经被看到了 实际上 只有当按下操作按钮时 它才应该出现 我知道这可以通过添加来实现eventReactive 但是有没有办法仅通过使用来实现这一点observ
  • 如果 OSX/iOS 中的网络代理设置发生更改,是否有办法接收通知/回调?

    如果 OSX iOS C C 或 Objective C 中的网络代理设置发生更改 我想收到通知 回调吗 有人有关于如何执行此操作的示例吗 监控系统配置SCDynamicStoreSetNotificationKeys 对于您需要注意的按键
  • 打开解析推送通知时出现异常[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 I setup 解析推送Android SDK 1 7 0 https parse com docs android g
  • 在 Spring 的 RequestMapping 中,{parameter:.+} 与 {parameter} 有什么不同吗?

    我正在查看一些使用 RequestMapping 的 Spring 代码 如下所示 RequestMapping foo bar 这在功能上与以下有什么不同吗 RequestMapping foo bar 据我所知 RegExp 始终应用于
  • 给定最大成本,找到具有最小成本和最大长度的路径

    我正在寻找一种算法 以在无向加权完整图中给定最大成本的情况下找到具有最小成本和最大长度的两个节点之间的路径 权重非负 就我现在而言 我正在使用 DFS 而且它非常慢 节点数量较多 长度也最大 我已经在 DFS 的每次迭代中丢弃了所有不可能的
  • 以编程方式设置文本时,如何避免出现自动完成下拉列表?

    我的布局中有一个 AutoCompleteTextView 我还有另一种方法来选择 AutoCompleteTextView 中存在的相同项目 当选择替代方式时 我通过以下方式填充 AutoCompleteTextView 中的值 auto
  • 如何在QT中发送和接收UDP数据包

    我正在 QT 中编写一个小型应用程序 它通过本地网络发送广播 UDP 数据包 并等待来自网络上的一个或多个设备的 UDP 响应数据包 创建套接字并发送广播数据包 udpSocketSend new QUdpSocket this udpSo
  • 使用 iTextSharp 压缩 PDF [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在尝试重新压缩已创建的pdf 我正在尝试找到一种方法来重新压缩文档中的图像 以减小文件大小 我一直在尝试使用 DataLogi
  • Android Studio:编译器发生异常(1.8.0_242-release)

    运行应用程序时 无法完成编译 继续抛出错误 我安装了jdk并添加了java home路径 但仍然出现此错误 另外 当我写 flutter doctor v 时我没有任何问题 请通过 Java 错误报告页面 http bugreport ja
  • 从 AOSP master 切换到 froyo

    我刚刚用 repo 检查了 master 现在我想改用froyo 我怎样才能做到这一点而不需要再次下载一堆东西 我不想再次下载一堆东西 我只是希望能够像普通的 git 克隆一样在分支之间自由移动 由于您使用 repo 下载了所有内容 因此您
  • 迭代 EnumMap#entrySet

    枚举结束Map entrySet对于所有 Map 实现 特别是 EnumMap 不能按预期工作 IdentityHashMap这是 Josh Bloch 的示例代码谜题演示 谜题 5 http strangeloop2010 com sys
  • 一次热编码期间出现 RunTimeError

    我有一个数据集 其中类值以 1 步从 2 到 2 i e 2 1 0 1 2 其中 9 标识未标记的数据 使用一种热编码 self one hot encode labels 我收到以下错误 RuntimeError index 1 is
  • Python:第二个for循环未运行

    scores surfers results f open results txt for each line in results f name score each line split scores append float scor
  • __attribute__ 是否适用于声明中的所有变量?

    是否 attribute 指令适用于在一行中声明的所有成员 int a b c 声明三个 int 变量 int a b c 将变量 a 声明为 int 指针 将 b 和 c 声明为 int int attribute used a b c
  • 如何检测 firebase firestore 数据库中的实时侦听器错误?

    火库听众 https firebase google com docs firestore query data listen将在一段时间后随机关闭 可能是由于不活动 并且在 python 中没有简单的方法来捕获它们抛出的错误 因为它们将它
  • 我需要 T-SQL 中的国家/地区列表

    我有一个国家 地区表 其中包含国家 地区名称列 我需要 DDL 中现成的列表来填充 CountryName 列 该表驻留在 SQL Server 2008 中 你可以尝试这个脚本 CREATE TABLE tbl Countries Cou
  • 使用 D3.js 单击切换图例时重绘堆栈条形图

    我想使用 D3 js 实现带有切换图例的堆栈栏 单击图例时 堆栈栏应重新绘制 如果图例处于活动状态 则与图例对应的矩形板应消失 反之亦然 单击图例时 我无法正确更新与组元素和组元素内存在的矩形元素绑定的数据 在 DOM 树中 单击图例 矩形
  • c# protobuf-net反序列化时某些属性值始终为-1

    在我没有注意到这一点之前 我不确定这个问题是否是错误 或者只是这个 我创建一个Document类并声明 protobuf net 限制 ProtoContract public class Document ProtoMember 1 pr
  • 打开本地项目钥匙串?

    有谁知道如何打开本地物品钥匙串 小牛队的新功能 SecKeychainOpen 我希望能够请求用户允许使用该钥匙串中的某些条目进行访问SecKeychainFindInternetPassword 例如对于您调用的系统钥匙串SecKeych
  • 如何使用“typedef NS_ENUM”在一个 .h 文件中定义多个变量类型

    我用过typedef NS ENUM重新组织旧代码中的数据常量 使用方法在这里找到 https stackoverflow com a 42009056 2348597 every typedef被声明在一个单一的 h可以导入到项目中任何类