メソッドパラメータに型とプロトコルを要求する 質問する

メソッドパラメータに型とプロトコルを要求する 質問する

私は 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) {
        ...
    }
}

おすすめ記事