作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Swift 中有以下枚举:
enum Animal {
case Cat(name: String, color: String)
case Dog(name: String, tailLength: Double)
case Cow(name: String, isBrown: Bool)
}
有没有办法在没有开关的情况下获取动物的名字,一个一个地匹配每个案例?像这样的东西:
func animalName(a: Animal) -> String {
// This does not work, you have to use a switch
return a.name
}
最佳答案
如果所有动物类型都有一个名称属性,那么我认为将其明确化会更好。
enum AnimalType {
case Cat(color: String)
case Dog(tailLength: Double)
case Cow(isBrown: Bool)
}
struct Animal {
let name: String
let type: AnimalType
}
我认为以上内容比@JanGreve 的回答更好,因为它允许您简单地执行以下操作:
func animalName(a: Animal) -> String {
// Now the below will work.
return a.name
}
以这种方式从对象中提取名称要容易得多,因为您不需要执行 if case 或 switch case。
关于swift - 获得一个通用的枚举属性,而不必匹配每个案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33869859/
我是一名优秀的程序员,十分优秀!