swift初心者です。

class Animal {

    // 動物名を返すメソッド
    class func returnAnimalName() -> String {
        fatalError(message: "このメソッドはオーバーライドされていません")
    }

    requied init() {
    }

}

class Dog: Animal {
    override class func returnAnimalName() -> String {
        return "Dog"
    }
}

class Cat: Animal {
    override class func returnAnimalName() -> String {
        return "Cat"
    }
}

このようなコードで動物名の文字列("Dog"や"Cat"等)を使ってその動物名が指すAnimalのサブクラスのメタタイプを得たいです。

let animalDict = ["Dog": Dog.self, "Cat": Cat.self]

let dogType = animalDict["Dog"]
let dog = dogType.init()

let catType = animalDict["Cat"]
let cat = catType.init()

このように動物名を入れるとそれが指すメタタイプを返すDictionaryを作るという方法もあるのですが、このようにするとAnimalのサブクラスを追加した時にこのDictionaryにも追加する必要があるゆえ、追加し忘れた時のことを考えるとバグの元です。他に何かいい方法はないでしょうか。
swift4、xcode9.2です。