首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >符合具有存储属性的协议的Enum

符合具有存储属性的协议的Enum
EN

Stack Overflow用户
提问于 2017-11-30 21:47:02
回答 2查看 2.8K关注 0票数 1

我正在跟踪速游,他们有一个协议的例子

代码语言:javascript
复制
protocol ExampleProtocol {
     var simpleDescription: String { get }
     mutating func adjust()
}

那么练习是

编写符合此协议的枚举。

如果我让Xcode存根去掉枚举,它就会这样做。

代码语言:javascript
复制
enum SimpleEnum: ExampleProtocol {
    var simpleDescription: String    
    func adjust() {
    }
    case foo
}

然后,它给出了错误“Enum可能不包含存储的属性”。如果删除该属性,则会出现错误“类型'SimpleEnum‘不符合协议'ExampleProtocol'”。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-30 21:51:04

好的,所以您所得到的错误是因为必须计算所有属性。所以,在简单的例子中,您可以这样做:

代码语言:javascript
复制
enum SimpleEnum: ExampleProtocol {
  case foo, bar

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

  func adjust() {

  }

}
票数 4
EN

Stack Overflow用户

发布于 2017-11-30 21:51:38

正如协议声明所示,simpleDescription应该是一个只有getter的计算属性,因此您应该在SimpleEnum中声明simpleDescription为计算属性。

代码语言:javascript
复制
enum SimpleEnum: ExampleProtocol {
    var simpleDescription: String {
        return "\(self)"
    }
    func adjust() {
    }
    case foo, bar
}

SimpleEnum.foo.simpleDescription //"foo"
SimpleEnum.bar.simpleDescription //"bar"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47583151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档