如何使用 Swift 1.2 确定 NS_ENUM 是否为未记录的值

2023-11-30

例如,定义了以下 NS_Enum...

typedef NS_ENUM(NSInteger, Type) {
  TypeNone = 0,
  TypeA = 1,
}
var x = 2
if let type: Type = Type(rawValue: x) {
  // Swift 1.2 executes this block.
}
else {
  // Previous swift executes this block.
}

如何确定 x 是否在 NS_ENUM 上定义?


I assume这是 Swift 1.2 中以下更改的结果,记录在 这Xcode 6.3 发行说明:

导入的 NS_ENUM 类型具有未记录的值,例如UIViewAnimationCurve,现在可以从原始整数转换 值使用init(rawValue:)初始化器而不被重置为nil。使用的代码unsafeBitCast作为此问题的解决方法可以 被编写为使用原始值初始值设定项。例如:

let animationCurve =  
     unsafeBitCast(userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue,
     UIViewAnimationCurve.self)

现在可以写成:

let animationCurve = UIViewAnimationCurve(rawValue:  
    userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue)!

问题(如果我理解正确的话)是

typedef NS_ENUM(NSInteger, UIViewAnimationCurve) { ... }

仅定义了 4 个可能的枚举值,但实际上可以采用其他值 (未记录的)值也是如此。这使得需要一些令人讨厌的解决方法,例如

  • 如何将原始值 7 强制写入 UIViewAnimationCurve 枚举?

为了解决这个问题,Swift 1.2 现在允许创建 枚举变量与随意的原始值(底层的 整数类型),如果枚举是从NS_ENUM定义。

其结果是,不可能以编程方式检查是否 “原始值”是定义值之一NS_ENUM定义。

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

如何使用 Swift 1.2 确定 NS_ENUM 是否为未记录的值 的相关文章

随机推荐

  • RestKit:重新验证后如何重新提交失败的请求?

    我正在开发的 API 要求我在自定义 HTTP 标头中提供身份验证令牌 该令牌每隔几分钟就会过期 并且只要用户闲置足够长的时间 该令牌就可能在用户仍在应用程序内时过期 当令牌过期时 我收到 403 响应 但只有在尝试请求后才发现 让 Res
  • 使用多处理锁定Python写入文件时丢失行

    这是我的代码 from multiprocessing import Pool Lock from datetime import datetime as dt console out STDOUT Console out chunksiz
  • 在fortran中以数组格式写入

    我尝试使用以下内容编写输出 file datnxn矩阵格式 我编写了代码 但输出是一列值为 f 的列 现在的问题是 如何更改要写入的文件的输出格式 从 1 2 4 5 到 1 2 3 4 5 6 8 program eccen implic
  • Objective-c 以半径搜索位置

    Objective C 是否有一个库可以让我指定半径和位置以及位置列表并告诉我哪些位置在该半径内 谢谢 如果你有 CLLocations 那么这样的事情会起作用 Given NSArray locations as an array of
  • OpenCV 3.0 VideoCapture 无法在 Java 中打开视频文件

    OpenCV 3 0 with Java无法打开视频文件 但可以使用摄像头 在我使用 OpenCV 3 0 beta 之前 它在两者中都运行良好 但在 2015 04 24 发布的 OpenCV 3 0 中不适用于视频文件 如果有人知道 O
  • 将字符串分解为Python中的字符列表[重复]

    这个问题在这里已经有答案了 本质上 我想从文件中提取一行文本 将字符分配给一个列表 并创建一个列表中所有单独字符的列表 列表的列表 目前 我已经尝试过 fO open filename rU fL fO readlines 这就是我所拥有的
  • 错误CS0116:命名空间不能直接包含字段或方法等成员

    好吧 我正在尝试制作一个程序来检查程序当前是否正在运行 每当我声明无效时 它都会给我一个错误 我是 C 新手 所以如果它很愚蠢 我很抱歉 using System using System Windows using System Coll
  • 在 WPF 中实现暂停

    这里有一个简单的 WPF 程序
  • Singleton:应该如何使用

    编辑 在另一个问题中 我提供了一个答案 其中包含许多有关单例的问题 答案的链接 关于单例的更多信息在这里 所以我已经阅读了该主题单身人士 好的设计还是拐杖 而且争论仍然很激烈 我将单例视为一种设计模式 好的和坏的 Singleton 的问题
  • 如何使用 Selenium 设置私人代理?

    几天来我一直在尝试使用 Firefox 在 Selenium 中设置私有代理 带身份验证 然而 无论我做什么 我都没有成功 目前 我已经尝试了以下两种方法 在这两种情况下 Firefox 都能正常启动没有任何代理 Proxy proxy n
  • 即使 OkHttp 不是依赖项,OkHttp 连接泄漏日志行也是如此

    当我使用我的应用程序时 我不断在 Logcat 中看到以下日志行 19098 19147
  • 关闭后如何清除dialog/xmlfragment内容? [复制]

    这个问题在这里已经有答案了 我的对话框定义为document onOpenDialog function var oView this getView var oDialog oView byId helloDialog create di
  • 如何通知 GCC 不要使用特定寄存器

    假设我有一个非常大的源代码并打算制作rdx在执行期间完全未使用寄存器 即在生成汇编代码时 我想要的只是通知我的编译器 GCC 它不应该使用rdx at all 注 注册rdx这只是一个例子 我对任何可用的 Intel x86 寄存器都满意
  • 我的类名与 Ruby 的类名冲突

    我的模块中有一个名为 Date 的类 但是当我想使用用 ruby 打包的 Date 类时 它会使用我的 Date 类 module Mymod class ClassA class Date lt Mymod ClassA require
  • 控制CPU利用率

    在运行时如何控制CPU利用率是明智的 轮询CPU负载并插入睡眠 我推荐操作系统功能 Windows 上有用于此目的的性能计数器和 WinAPI 函数 这是一个使用的示例性能计数器 from BCL 团队博客 foreach Process
  • 将 pyqtgraph 绘图嵌入到 QT .ui 中?

    首先 我希望您对我有一些耐心 因为我是此类项目的新手 我也希望不要问愚蠢的问题 话虽这么说 我的主要目标是为树莓派 3 创建一个 UI 它将感应电池和太阳能电池板的电压 电流等 由于我正在研究树莓派并且对Python3有一些了解 所以我决定
  • 从基于文本的表输出中提取列

    qfarm load命令显示我的服务器的负载 输出 PS gt qfarm load Server Name Server Load Load Throttling Load Logon Mode SERVER 01 400 0 Allow
  • Windows 10 上使用 IE 的量角器失败 - 错误代码 199

    我无法让量角器在 Windows 10 上使用 IE 11 它说Unable to create new service InternetExplorerDriverService并且存在代码 199 我尝试过旧的重新安装 升级节点 npm
  • 如何使用 Power Query 有效地密集表中的排名组

    我一直在尝试最简单的方法对具有组或类别的数据对以下数据进行密集排名 我已经问过类似的问题来对数据进行排名 但这是针对分组数据的 我希望对分数列进行排名 如下所示 使得最高的数字占据第一位置 第一 第二大的数字占据第二位 依此类推 如果有平局
  • 如何使用 Swift 1.2 确定 NS_ENUM 是否为未记录的值

    例如 定义了以下 NS Enum typedef NS ENUM NSInteger Type TypeNone 0 TypeA 1 var x 2 if let type Type Type rawValue x Swift 1 2 ex