Swift 符合协议且具有存储属性的枚举
我遵循的是,他们有一个协议的例子Swift 符合协议且具有存储属性的枚举,swift,enums,swift-protocols,Swift,Enums,Swift Protocols,我遵循的是,他们有一个协议的例子 protocol ExampleProtocol { var simpleDescription: String { get } mutating func adjust() } 那么这个练习就是 编写符合此协议的枚举 如果我让Xcode去掉枚举,它就会这样做 enum SimpleEnum: ExampleProtocol { var simpleDescription: String func adjust()
protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
}
那么这个练习就是
编写符合此协议的枚举
如果我让Xcode去掉枚举,它就会这样做
enum SimpleEnum: ExampleProtocol {
var simpleDescription: String
func adjust() {
}
case foo
}
然后它给了我一个错误“枚举可能不包含存储的属性”。如果删除该属性,则会出现错误“type'simplenum'不符合协议'ExampleProtocol'”
我今天刚开始学习Swift,所以我不知道正确的方法是什么。好的,所以您得到的错误是因为必须计算所有属性。因此,在您的简单示例中,您可以这样做:
enum SimpleEnum: ExampleProtocol {
case foo, bar
var simpleDescription: String {
switch self {
case .foo: return "Foo"
case .bar: return "Bar"
}
}
func adjust() {
}
}
好的,您得到的错误是因为必须计算所有属性。因此,在您的简单示例中,您可以这样做:
enum SimpleEnum: ExampleProtocol {
case foo, bar
var simpleDescription: String {
switch self {
case .foo: return "Foo"
case .bar: return "Bar"
}
}
func adjust() {
}
}
正如协议声明所示,
simpleDescription
应该是一个只有getter的计算属性,因此您应该在simplenum
中将simpleDescription
声明为一个计算属性
enum SimpleEnum: ExampleProtocol {
var simpleDescription: String {
return "\(self)"
}
func adjust() {
}
case foo, bar
}
SimpleEnum.foo.simpleDescription //"foo"
SimpleEnum.bar.simpleDescription //"bar"
正如协议声明所示,
simpleDescription
应该是一个只有getter的计算属性,因此您应该在simplenum
中将simpleDescription
声明为一个计算属性
enum SimpleEnum: ExampleProtocol {
var simpleDescription: String {
return "\(self)"
}
func adjust() {
}
case foo, bar
}
SimpleEnum.foo.simpleDescription //"foo"
SimpleEnum.bar.simpleDescription //"bar"
您还可以使用
return“\(self)”
返回foo
或bar
另一个示例是使用var simpleDescription:String=“foo”
实现协议的类。这是计算财产的简写吗?因为在我看来它是存储的。一个类可以有存储的属性。枚举不能。因此,在一个类中,你可以明确地说var simpleDescription:String=“foo”
。你也可以使用return“\(self)”
,它将返回foo
或bar
,它们给出的另一个例子是一个使用var simpleDescription:String=“foo”
实现协议的类。这是计算财产的简写吗?因为在我看来它是存储的。一个类可以有存储的属性。枚举不能。因此,在类中,您可以明确地说var simpleDescription:String=“foo”
。