我正在玩Swift,并且遇到了以下问题:给定我有预定义的类Animal
:
//Predefined classes
class Animal {
var height: Float = 0.0
}
现在,我使用接受动物的构造函数编写
Zoo
类。但是Zoo
希望每个动物都有一个名字,因此定义了Namable
协议(protocol)。protocol Namable {
var name: String {get}
}
class Zoo {
var animals: Animal[] = [];
}
您将如何编写
addAnimal
方法,该方法要求作为参数传递的对象必须是类型 Animal
和都符合协议(protocol) Namable
?以及如何为animals
数组声明它? func addAnimal:(animal: ????) { ... }
在Objective-C中,我会写这样的东西
- (void)addAnimal:(Animal<Namable>*)animal {...}
最佳答案
您可以在具有多个条件的where
子句中使用泛型。
func addAnimal<T: Animal where T: Nameable>(animal: T) { ... }
修订:您可能应该使整个类具有通用性,以便您可以正确键入数组
class Zoo<T: Animal where T: Nameable> {
var animals : T[] = []
func addAnimal(a: T) {
...
}
}