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
    }
}