美文网首页
动态类型和多方法

动态类型和多方法

作者: 盖小聂 | 来源:发表于2019-06-28 18:11 被阅读0次
    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
        }
    }
    

    相关文章

      网友评论

          本文标题:动态类型和多方法

          本文链接:https://www.haomeiwen.com/subject/ozvecctx.html