例如,我想添加如下内容:
extension enum : T {
convenience init? (rawData: T?) -> enum? {
guard let rawData = rawData else { return nil; }
return self.init(rawData: rawData);
}
}
我知道这可能不是我需要扩展枚举的最佳案例,但我只是想探索各种可能性。感谢。
答案 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