私は Swift をいじっているのですが、次のような問題に遭遇しました。定義済みのクラスがあるとしますAnimal
。
//Predefined classes
class Animal {
var height: Float = 0.0
}
Zoo
私は今、動物を受け入れるコンストラクターを持つクラスを書いています。しかしZoo
、すべての動物に名前を付けたいので、Namable
プロトコルを定義します。
protocol Namable {
var name: String {get}
}
class Zoo {
var animals: Animal[] = [];
}
addAnimal
パラメータとして渡されるオブジェクトが両方であることを要求するメソッドをどのように記述しますか?タイプ Animal
そしてプロトコルに従う Namable
? 配列に対してそれをどのように宣言するのでしょうかanimals
?
func addAnimal:(animal: ????) { ... }
Objective-Cでは、次のように書きます
- (void)addAnimal:(Animal<Namable>*)animal {...}
ベストアンサー1
複数の条件を持つ句でジェネリックを使用できますwhere
。
func addAnimal<T: Animal where T: Nameable>(animal: T) { ... }
修正: 配列を適切に型付けできるように、クラス全体をこのようにジェネリックにする必要があります。
class Zoo<T: Animal where T: Nameable> {
var animals : T[] = []
func addAnimal(a: T) {
...
}
}