首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可见字符串枚举但不包括RawRepresentable

可见字符串枚举但不包括RawRepresentable
EN

Stack Overflow用户
提问于 2019-04-04 02:11:10
回答 1查看 1.5K关注 0票数 2

我想使用在目标C和Swift中都可见的枚举,但不符合RawRepresentable协议。

  1. 我试图让字符串的枚举在Objc和Swift中都可见,因此我使用 typedef NSString *myEnum NS_TYPED_ENUM;
  2. 我试图利用myEnum(rawValue:) -> myEnum?函数,但我发现enumType自动符合 public struct myEnum : Hashable, Equatable, RawRepresentable { public init(rawValue: String) }

我的问题是如何创建在Objc和Swift中可见但不符合该协议的enum?谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-04 03:03:59

Swift语言增强 ..。现在可以使用@objc属性将Swift枚举导出到Objective。@objc枚举必须声明整数原始类型,并且不能是泛型或使用关联值。因为Objective枚举不是名称空间,所以枚举案例作为枚举名称和案例名称的连接导入到Objective中。

以上来自Xcode 6.4发行说明

为此,可以使用NS_TYPED_ENUM宏导入Swift中的常量,例如:.h文件

代码语言:javascript
复制
typedef NSString *const ProgrammingLanguage NS_TYPED_ENUM;

FOUNDATION_EXPORT ProgrammingLanguage ProgrammingLanguageSwift;
FOUNDATION_EXPORT ProgrammingLanguage ProgrammingLanguageObjectiveC;

.m文件

代码语言:javascript
复制
ProgrammingLanguage ProgrammingLanguageSwift = @"Swift";
ProgrammingLanguage ProgrammingLanguageObjectiveC = @"ObjectiveC";

在Swift中,这是作为这样一个结构导入的:

代码语言:javascript
复制
struct ProgrammingLanguage: RawRepresentable, Equatable, Hashable {
    typealias RawValue = String

    init(rawValue: RawValue)
    var rawValue: RawValue { get }

    static var swift: ProgrammingLanguage { get }
    static var objectiveC: ProgrammingLanguage { get }
}

虽然该类型不是作为枚举桥接的,但在Swift代码中使用它时感觉非常类似。

您可以在与C API的“使用Swift与Cocoa和Objective文档交互”中了解更多有关此技术的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55506853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档