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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以扩展Swift保留字“enum”吗?相关的知识,希望对你有一定的参考价值。

例如,我想添加这样的东西:

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”(重点补充):

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

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

如果您打算从可选原始值实例化枚举值,那么您可以定义“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

以上是关于我可以扩展Swift保留字“enum”吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以将 Enum 扩展为 Enum.GetValues() 吗? [复制]

什么是 Swift “扩展”的 dart 等价物?

Swift [1,2] 符合 AnyObject 但 [Enum.a, Enum.b] 不符合

Swift - 将 Int 转换为 enum:Int

java的关键字与保留字

我可以将.png数据转换为Swift中的Int吗?