动态类型和多方法

class ViewController: UIViewController {

    func printPet(_ pet: Pet) {
        print("Pet")
    }
    func printPet(_ cat: Cat) {
        print("Cat")
    }
    func printPet(_ doy: Dog) {
        print("Dog")
    }

    func printThem(pet: Pet, _ cat: Cat) {
        printPet(pet)
        printPet(cat)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        printPet(Pet()) //Pet
        printPet(Cat()) //Cat
        printPet(Dog()) //Dog
        
        //打印时的Dog()的类型信息并没有被用来在运行时选择合适的printPet(_ dog: Dog)版本的方法,
        //而是被忽略掉,并采用了编译期决定的Pet版本的方法。
        //因为Swift默认情况下是不采用动态派发的,因此方法的调用只能在编译时决定。
        printThem(pet: Dog(), Cat()) //Pet Cat
    }
}

你可能感兴趣的:(动态类型和多方法)