调用具有相同变量和值的子类

时间:2017-02-10 09:00:34

标签: ios swift

所以我有动物超类和三个子类:狮子狗和大象。

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)
            }
        }
    }
}

我尝试了一些像下面的例子,但它显然不起作用。

任何提示都表示赞赏!

3 个答案:

答案 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
    }