我正在跟踪速游,他们有一个协议的例子
protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
}那么练习是
编写符合此协议的枚举。
如果我让Xcode存根去掉枚举,它就会这样做。
enum SimpleEnum: ExampleProtocol {
var simpleDescription: String
func adjust() {
}
case foo
}然后,它给出了错误“Enum可能不包含存储的属性”。如果删除该属性,则会出现错误“类型'SimpleEnum‘不符合协议'ExampleProtocol'”。
我今天刚开始学习Swift,所以我不知道正确的方法是什么。
发布于 2017-11-30 21:51:04
好的,所以您所得到的错误是因为必须计算所有属性。所以,在简单的例子中,您可以这样做:
enum SimpleEnum: ExampleProtocol {
case foo, bar
var simpleDescription: String {
switch self {
case .foo: return "Foo"
case .bar: return "Bar"
}
}
func adjust() {
}
}发布于 2017-11-30 21:51:38
正如协议声明所示,simpleDescription应该是一个只有getter的计算属性,因此您应该在SimpleEnum中声明simpleDescription为计算属性。
enum SimpleEnum: ExampleProtocol {
var simpleDescription: String {
return "\(self)"
}
func adjust() {
}
case foo, bar
}
SimpleEnum.foo.simpleDescription //"foo"
SimpleEnum.bar.simpleDescription //"bar"https://stackoverflow.com/questions/47583151
复制相似问题