gpt4 book ai didi

objective-c - Objc 可见字符串枚举但不是 RawRepresentable

转载 作者:搜寻专家 更新时间:2023-11-01 06:53:29 25 4
gpt4 key购买 nike

我想使用在 Objective-C 和 Swift 中都可见但不符合协议(protocol) RawRepresentable 的枚举。

  1. 我试图让一个字符串枚举在 Objc 和 Swift 中都可见,因此我使用了

    typedef NSString *myEnum NS_TYPED_ENUM;

  2. 我试图利用 myEnum(rawValue: ) -> myEnum?功能,但我发现 enumType 已自动符合

    public struct myEnum : Hashable, Equatable, RawRepresentable {
    公共(public)初始化(原始值:字符串)
    }

我的问题是如何创建在 Objc 和 Swift 中可见但不符合此协议(protocol)的枚举?感谢所有的帮助!

最佳答案

Swift Language Enhancements

... Swift enums can now be exported to Objective-C using the @objcattribute. @objc enums must declare an integer raw type, and cannot begeneric or use associated values. Because Objective-C enums are notnamespaced, enum cases are imported into Objective-C as theconcatenation of the enum name and case name.

以上来自 Xcode 6.4 Release Notes


为此,您在 Objective-C 中定义值,您可以使用 NS_TYPED_ENUM 宏在 Swift 中导入常量例如:.h文件

typedef NSString *const ProgrammingLanguage NS_TYPED_ENUM;

FOUNDATION_EXPORT ProgrammingLanguage ProgrammingLanguageSwift;
FOUNDATION_EXPORT ProgrammingLanguage ProgrammingLanguageObjectiveC;

.m 文件

ProgrammingLanguage ProgrammingLanguageSwift = @"Swift";
ProgrammingLanguage ProgrammingLanguageObjectiveC = @"ObjectiveC";

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

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 代码中使用它时感觉非常相似。

您可以在 Using Swift with Cocoa and Objective-C documentation 的“与 C API 交互”中阅读有关此技术的更多信息

关于objective-c - Objc 可见字符串枚举但不是 RawRepresentable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55506853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com