例如,我想添加这样的内容:
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/