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

时间:2018-02-28 08:55:14

标签: swift enums

例如,我想添加如下内容:

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

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

1 个答案:

答案 0 :(得分:4)

来自“The Swift Programming Language”中的Extensions(重点补充):

  

扩展程序为现有的类,结构,枚举或协议类型添加新功能。

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

如果您的目的是从a实例化枚举值 可选的原始值,然后您可以定义“protocol extension”

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

这为符合条件的所有类型添加了一个新的初始化程序 RawRepresentable协议,特别是所有枚举类型 原始值类型。

示例:

enum Foo: String {
    case a
    case b
}

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