美文网首页
Swift协议的动态、静态派发

Swift协议的动态、静态派发

作者: 四月白绵羊 | 来源:发表于2017-10-06 03:04 被阅读0次

在Swift中协议具有强大的功能。通过拓展,不仅能在协议中添加已于方法的具体实现,还能添加新的方法。

通过协议拓展来增加代码和继承的优势:

  1. 不需要强制继承某一个父类。
  2. 可以让已经存在的类型遵循协议。
  3. 协议可以用于类,也可以用于结构体和枚举。
  4. 使用协议,不用在乎super方法的调用。
  • 需要注意的一点,在协议中定义的方法是动态派发的,在协议拓展中实现方法(没有在协议主体中声明的)是静态派发。动态派发指的是在变量具体是哪一种类型,就到具体的类型中找方法的实现(不在乎声明变量时候 声明的是什么类型),如果有就调用,如果没有再去调协议拓展中的实现。静态派发指的是 变量声明时候指定的是哪一种类型,就到这个类型中去找方法的实现,即使它的实际类型有其他的实现,也不会去调用。

For example:

protocol Fruit{
    func ripe()
}
extension Fruit{
    func ripe(){
        print ("Fruit ripe.")
    }
    func name(){
        print("Fruit")
    }
}
struct Banana : Fruit{
    func ripe(){
        print ("Banana ripe.")
    }
    func name(){
        print("Banana")
    }
}

Based on the definition, we call the methods.

let a : Fruit = Banana()
let b : Banana = Banana()
a.ripe()
b.ripe()
a.name()
b.name()

The output should be:

Banana ripe
Banana ripe
Fruit
Banana

由于name方法并没有在协议中定义,属于静态派发。所以即便a的实际类型是Banana,但是并不会去调用Banana中name方法。

相关文章

  • Swift派发机制

    Swift派发分:静态派发和动态派发 静态派发:(又叫:直接调用) 静态派发机制,同时支持值类型和引用类型;静态派...

  • Swift 和 Objective-C的区别

    swift是静态语言 oc是动态语言 swift是面向协议编程 oc是面向对象编程 纯swift的函数派发方式是直...

  • Swift协议的动态、静态派发

    在Swift中协议具有强大的功能。通过拓展,不仅能在协议中添加已于方法的具体实现,还能添加新的方法。 通过协议拓展...

  • Swift - 三种函数派发

    Swift 的函数派发可以分为 静态 和 动态 两种机制,而动态派发又分为 函数表派发 和 消息派发 。 Swif...

  • iOS那些不解的知识收集

    Swift 静态派发和动态派发动态派发是指需要在运行时找到方法的具体实现。静态派发是指在运行时调用方法不需要查表,...

  • Swift静态 派发和动态派发

    1.静态派发机制同时支持值类型和引用类型 然而,动态派发机制仅支持引用类型,比如Class,简而言之:对于动态性或...

  • Swift的静态派发和动态派发机制

    原文地址:Static vs Dynamic Dispatch in Swift: A decisive choi...

  • 浅谈Swift派发机制

    函数的派发机制分为:静态派发(直接派发)、函数表派发、消息派发 1、Swift中所有ValueType(值类型:S...

  • iOS知识复习笔记(16)---swift相关

    一、函数的派发方式 swift函数的派发机制有三类:static直接派发(静态)派发、table函数派发,mess...

  • swift面试题

    一.Swift和OC的区别? 1.swift是静态语言,有类型推断,OC是动态语言。 2.swift面向协议编程,...

网友评论

      本文标题:Swift协议的动态、静态派发

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