当前位置: 首页 > 面试题库 >

是否可以在Obj-C中使用Swift的枚举?

方茂
2023-03-14
问题内容

我正在尝试将我的某些Obj-C类转换为Swift。还有其他一些Obj-
C类仍在该转换后的类中使用枚举。我在“预发布文档”中进行了搜索,但找不到它,或者我错过了它。有没有办法在Obj-
C类中使用Swift枚举?或指向此问题的文档的链接?

这就是我在旧的Obj-C代码和新的Swift代码中声明枚举的方式。

我以前的Obj-C代码:

typedef NS_ENUM(NSInteger, SomeEnum)
{
    SomeEnumA,
    SomeEnumB,
    SomeEnumC
};

@interface SomeClass : NSObject

...

@end

我的新Swift代码:

enum SomeEnum: NSInteger
{
    case A
    case B
    case C
};

class SomeClass: NSObject
{
    ...
}

更新: 从答案。在Swift低于1.2的旧版本中无法完成。但是根据这个官方的Swift
Blog。在与XCode 6.3一起发布的Swift
1.2中,您可以在Objective-C中使用Swift Enum,方法是@objcenum


问题答案:

从Swift版本1.2(Xcode 6.3)开始,您可以。只需在枚举声明前面加上前缀@objc

@objc enum Bear: Int {
    case Black, Grizzly, Polar
}

无耻地从Swift博客中获取

注意:这不适用于String枚举或具有关联值的枚举。您的枚举必须是整数绑定的

在Objective-C中,这看起来像

Bear type = BearBlack;
switch (type) {
    case BearBlack:
    case BearGrizzly:
    case BearPolar:
       [self runLikeHell];
}


 类似资料:
  • 问题内容: 我有一个带有值的枚举,它将用于告诉将消息记录到服务器的服务器类型的API方法。我正在使用Swift 1.2,因此可以将枚举映射到Objective-C 我得到错误 @objc枚举原始类型字符串不是整数类型 我没有设法找到任何地方说只有整数可以从Swift转换为Objective-C。是这样吗 如果是这样,是否有人对在Objective- C中提供类似的最佳实践建议? 问题答案: 从Xc

  • 从这个问题,有可能注入map与枚举? 例如,我有枚举: 我有一些与实现的接口: 但这样的注入不起作用: 我想自动注入。如何修复它,在spring框架端生成这样的代码?

  • 问题内容: Python 3.4引入了一个新模块,该模块向该语言添加了枚举类型。的文档提供了一个示例来演示如何扩展它: 此示例还演示了一个问题:在property方法中,定义了一个常量,该常量通常在类级别定义- 但是尝试在a级别内执行此操作只会将其添加为枚举的成员之一,因此,在方法内部定义。 如果该类想在其他方法中使用此常量,则也必须在其中定义它,这显然不是理想的选择。 有什么方法可以在中定义类常

  • 问题内容: 如果是这样,那么在Objective-C中使用键值观察时是否没有其他键差异? 问题答案: (编辑以添加新信息):考虑使用Combine框架是否可以帮助您完成所需的工作,而不是使用KVO 是的,没有。KVO一直以来都在处理NSObject子类。它不适用于不继承NSObject的类。斯威夫特(目前至少)没有自己的原生观察系统。 (有关如何将其他属性公开为ObjC的信息,请参见注释,以便KV

  • 是否可以在EMF Ecore模型中使用枚举实现接口?在Java中可以有类似的内容:。我希望能够通过EMF生成这样的内容(顺便说一句,默认情况下EMF生成的所有枚举都实现)。 我找不到让生成的枚举实现特定接口的方法。我不能在ecore关系图编辑器和ecore模型编辑器中用枚举定义继承关系。在生成代码后,我可以手工将添加到枚举中,但每次再次生成代码时,它都会被覆盖。 现在,我所做的是每次修改模型中的枚

  • 问题内容: 是否可以在Java枚举中使用,还是需要使用?在我的测试中,它始终有效,但是我不确定是否可以保证。特别是,在枚举上没有方法,因此我不知道是否有可能获得一个枚举,该枚举将返回不同于的值。 例如,这样可以吗: 还是我需要这样写: 问题答案: 仅需2美分:这是Sun发布的Enum.java的代码,并且是JDK的一部分: