Swift:协议“静态变量foo:Self”和枚举 简化示例
看看这个简单的协议Swift:协议“静态变量foo:Self”和枚举 简化示例,swift,enums,swift-protocols,Swift,Enums,Swift Protocols,看看这个简单的协议 protocol FooOwner { static var foo: Self { get } } 我希望枚举符合上述协议,我认为这应该是可行的,因为静态语法sometypeconformingtooowner.foo应该导致sometypeconformingtooowner的实例,并且在sometypeconformingtooowner是枚举的情况下 enum Foo: FooOwner { // Type 'Foo' does not conform to
protocol FooOwner {
static var foo: Self { get }
}
我希望枚举符合上述协议,我认为这应该是可行的,因为静态语法sometypeconformingtooowner.foo
应该导致sometypeconformingtooowner
的实例,并且在sometypeconformingtooowner
是枚举的情况下
enum Foo: FooOwner { // Type 'Foo' does not conform to protocol FooOwner
case foo
}
解决办法是这样一件丑陋的事情:
protocol FooOwner {
static var fooOwner: Self { get }
}
enum Foo: FooOwner {
case foo
static var fooOwner: Foo {
return Foo.foo
}
}
对于符合静态变量协议的enum,您有更好的解决方法吗
实际用例
这是最后一部分,我想改为:
extension HexString {
enum Error: StringConvertibleError {
case invalidCharacters
}
}
因为我有许多类似于HexString
的类型
是的,当然,我可以使用一个共享错误枚举,但我希望每种类型有一个特定的枚举。解决了这个问题-如果接受的话。目前正在审查
编辑1
好消息,.
静态变量foo!=case foo
假设您使用了适当的名称,那么解决方法还不错。你想用这种方法解决什么问题吗?也许我们能找到另一个选择。@tikhonov alexander是的,我知道。。。但是,如果Swift能够通过一些常见的案例
支持将不同的枚举桥接在一起,那就太好了。当然,我可以使用openenum
(例如struct
),但我确实想使用enum。
extension HexString {
enum Error: StringConvertibleError {
case invalidCharacters
}
}