例如,我想添加如下内容:
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)
我知道这可能不是我为什么需要扩展枚举的最佳案例,但我只是想探索可能性。谢谢。
来自“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)
归档时间: |
|
查看次数: |
685 次 |
最近记录: |