Swift 的函数派发理解
发布时间:2020-12-14 06:13:49 所属栏目:百科 来源:网络整理
导读:参考:http://www.jb51.cc/article/p-pjlxfjje-d.html 对于编译型的语言,函数派发的三种基础模式分别是: 直接派发(direct dispatch)(也可以理解外,直接调用 ,不需要曲线救国 ) 函数表派发(table dispatch)(面向对象的语言中,一般都会有类的概念
参考:http://www.52php.cn/article/p-pjlxfjje-d.html 对于编译型的语言,函数派发的三种基础模式分别是:
了解这些后,我们来看一下,swift 中的函数;一、swift 中函数 的位置: b、扩展作用域 c、在协议中可以申明函数,不实现 d 、在结构体中 :直接派发 swift 派发方式: 看一下下面这个例子 class A:NSObject{
//函数 sayhi() 会在 a 消息机制:加上 dynamic 强制为 消息机制发送
dynamic func sayhi() {
print("a-消息派发")
}
//函数 sayhi() 会在 a的函数表里找到
func sayhi1() {
print("a-函数派发")
}
}
func say(a:A){
a.sayhi()
a.sayhi1()
}
say(a: A())
//结果 1 这里没啥好说的,主要看下面的扩展,会发现很有意思的事
//a-消息派发
//a-函数派发
class B:A{
//函数 采用 函数表派发
}
extension B{
//消息派发
override func sayhi() {
print("b-重写 消息派发")
}
override func sayhi1() {
print("消息派发2")
}
}
say(a: B())
//结果:2
//b-重写 消息派发
//a-函数派发
在结果2中,我们发现 重写 message dispath的函数,可以执行; 重写 table dispatch 的函数,结果还是父类里面的内容; 在这里,这个就是由于 swift 派发机制 决定的,对于 b类里面,是继承nsobject ,派发是:消息机制,在a 类里默认是函数机制,所以这里 派发机制不统一,所以出现问题,所以, 这里解决方式: 1、将 重写方法 放类里面 2、加 dynamic 修饰符 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |