我跟随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,所以我不知道正确的方法是什么。
答案 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"