符合存储 属性 协议的枚举

Enum conforming to protocol with stored property

我正在关注 Swift Tour,他们有这个协议示例

protocol ExampleProtocol {
     var simpleDescription: String { get }
     mutating func adjust()
}

那么练习就是

Write an enumeration that conforms to this protocol.

如果我让 Xcode 删除枚举,它会这样做

enum SimpleEnum: ExampleProtocol {
    var simpleDescription: String    
    func adjust() {
    }
    case foo
}

然后它给了我错误 "Enums may not contain stored properties"。如果我删除 属性,它会给我错误 "type 'SimpleEnum' does not conform to protocol 'ExampleProtocol'".

我今天才开始学习Swift,所以我不知道正确的方法是什么。

好的,您收到的错误是因为必须计算所有属性。因此,在您的简单示例中,您可以执行以下操作:

enum SimpleEnum: ExampleProtocol {
  case foo, bar

  var simpleDescription: String {
     switch self {
       case .foo: return "Foo"
       case .bar: return "Bar"
     }
  } 

  func adjust() {

  }

}

如协议声明所示,simpleDescription 应该是一个只有 getter 的计算 属性,因此您应该将 simpleDescription 声明为一个计算 属性 以及 SimpleEnum.

enum SimpleEnum: ExampleProtocol {
    var simpleDescription: String {
        return "\(self)"
    }
    func adjust() {
    }
    case foo, bar
}

SimpleEnum.foo.simpleDescription //"foo"
SimpleEnum.bar.simpleDescription //"bar"