符合存储 属性 协议的枚举
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"
我正在关注 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"