我可以扩展 Swift 保留字“enum”吗?

Che*_*ong 1 enums swift

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

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

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

Mar*_*n R 5

来自“The Swift Programming Language”中的扩展(强调):

扩展向现有类、结构、枚举或协议类型添加新功能

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

如果您打算从一个可选的原始值实例化一个枚举值,那么您可以定义一个“协议扩展”

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

这为所有符合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
Run Code Online (Sandbox Code Playgroud)

  • @ChenLiYong 它不会使 `enum` 从可选值实例化,它使实现 `RawRepresentable` 的类型能够从可选值实例化。碰巧的是,所有具有原始值的 `enum`(即以 `enum MyType: Type { ... }` 形式声明的所有内容)都采用 `RawRepresentable` (3认同)