繁体   English   中英

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

[英]Can I extend the Swift reserved word “enum”?

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

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

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

在“ Swift编程语言”的扩展中(添加了重点):

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM