swift - 我可以扩展 Swift 保留字 "enum"吗?

标签 swift enums

例如,我想添加这样的内容:

extension enum : T {
    convenience init? (rawData: T?) -> enum? {
        guard let rawData = rawData else { return nil; }
        return self.init(rawData: rawData);
    }
}

我知道这可能不是我需要扩展枚举的最佳案例,但我只是想探索各种可能性。谢谢。

最佳答案

来自 Extensions在“The Swift Programming Language”中(已强调):

Extensions add new functionality to an existing class, structure, enumeration, or protocol type.

enum 是关键字,不是类型,因此 extension enum 不能 被定义。

如果您的意图是从一个实例化一个枚举值 可选的原始值,那么你可以定义一个 “protocol extension” :

extension RawRepresentable {
    init?(rawData: RawValue?) {
        guard let rawData = rawData else { return nil }
        self.init(rawValue: rawData)
    }
}

这会为所有符合 RawRepresentable 协议(protocol),尤其适用于所有枚举类型 具有原始值类型。

例子:

enum Foo: String {
    case a
    case b
}

print(Foo(rawData: "a"))  // Optional(Foo.a)
print(Foo(rawData: "x"))  // nil
print(Foo(rawData: nil))  // nil

关于swift - 我可以扩展 Swift 保留字 "enum"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49025466/

相关文章:

ios - 如何基于 iPhone TrueDepth Camera 生成 3D 模型?

c - 将枚举值切换为位标志

插入 View Controller 时快速背景颜色

ios - Swift 泛型类、继承和协方差

ios - SwiftUI 工作表无限显示和隐藏

ios - 在不延迟 UIViewController segue 的情况下运行 CPU 密集型代码?如何在 UIViewController 出现后*仅执行一次代码?

C++11 将枚举转换为整数

c# - 根据索引检索枚举的值 - C#

java - 枚举<?扩展界面>

C# 创建一个由多个类使用的枚举的最佳方法是什么?