枚举符合存储属性的协议

时间:2017-11-30 21:47:02

标签: swift enums swift-protocols

我跟随Swift Tour,他们有一个协议的例子

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

然后练习

  

编写符合此协议的枚举。

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

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

然后它给我错误"枚举可能不包含存储的属性"。如果我删除该属性,它会给我错误"输入' SimpleEnum'不符合协议' ExampleProtocol'"。

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

2 个答案:

答案 0 :(得分:3)

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

enum SimpleEnum: ExampleProtocol {
  case foo, bar

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

  func adjust() {

  }

}

答案 1 :(得分:0)

正如协议声明所示,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"