所以我有动物超类和三个子类:狮子狗和大象。
enum Gender {
case male
case female
}
class Animal {
var species: String
var gender: Gender
init (species: String, gender: Gender) {
self.species = species
self.gender = gender
}
}
// Lion Class
class Lion: Animal {
var age: Int = 10
init () {
super.init(species: "Lion", gender: Gender.male)
}
}
// Elephant Class
class Elephant: Animal {
var age: Int = 8
init () {
super.init(species: "Elephant", gender: Gender.female)
}
}
//Dog Class
class Dog: Animal {
var age: Int = 6
init () {
super.init(species: "Dog", gender: Gender.female)
}
}
它们都有性别变量,它继承自超类Animal。
现在我想要一个计算属性:maleAnimal
类型[Animal]
,它包含所有雄性动物,最好的方法是什么?
class Zoo {
var animals: [Animal] = [Lion(), Elephant(), Dog()]
var maleAnimals: [Animal] {
for animalClasses in animals {
if animalClasses.gender == Gender.male {
return self.maleAnimals.append(animalClasses)
}
}
}
}
我尝试了一些像下面的例子,但它显然不起作用。
任何提示都表示赞赏!
答案 0 :(得分:4)
您可以在数组上使用filter
方法。
var maleAnimals : [Animal] {
return animals.filter { $0.gender == .male }
}
答案 1 :(得分:3)
你要找回你找到的第一只雄性动物。您应该在'animals'数组中使用'filter'方法。
var maleAnimals: [Animal] {
return animals.filter { $0.gender == .male }
}
答案 2 :(得分:2)
虽然其他答案是正确的,这就是你应该如何使用,这里是你的代码的修复,基本上你必须在闭包内创建新变量,为它赋值,然后返回它,希望它可以给你更多了解如何使用计算值
var maleAnimals : [Animal] {
var array = [Animal]()
for animalClasses in animals {
if animalClasses.gender == Gender.male {
array.append(animalClasses)
}
}
return array
}