B 的一个方法运行到某处,需要把自己的一个值告诉 A,并且做一定处理
怎么来实现呢?
首先 B 要知道自己去告诉谁,然后再调用 A.aFunc()
我知道想知道原理的不想看代码,尽量简化了
A, B 类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
A.
swift
class A {
func aFunc(b:
B) {
println(b.value)
}
}
B.
swift
class B {
var value =
0
func bFunc () {
value =
213
a.aFunc(b)
}
}
|
上面是不行的,为啥呢?
因为 b 里面并没有 a,如果直接把 A 传进去,就要修改 B 的代码,也就丢失了封装
我们看下 Delegate 怎么实现这种机制的
Delegate
既然是 B 要往外发送消息,就先从 B 下手:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
A.
swift
class A {
func aFunc(b:
B) {
println(b.value)
}
}
b.
swift
protocol BDelegate {
func aFunc(b:
B)
}
class B {
var delegate:
BDelegate?
var value =
0
func bFunc () {
value =
213
delegate?.aFunc(
self)
}
}
|
做了 1、2、3后,还是不行,为啥呢?
因为 A 不知道 B 进行了委托,两者没关联起来
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
a.
swift
class A: BDelegate {
func aFunc(b:
B) {
b.delegate =
self
println(b.value)
}
}
b.
swift
protocol BDelegate {
func aFunc(b:
B)
}
class B {
var delegate:
BDelegate?
var value =
0
func bFunc () {
value =
213
delegate?.aFunc(
self)
}
}
main.
swift
let b =
B()
let a =
A()
a.aFunc(b)
b.bFunc()
|
大功告成
回想下常见的代码,比如:
1
2
3
4
5
|
mScrollView.delegate =
self
...
class MYScrollView : UIScrollView, UIScrollViewDelegate {
...
func scrollViewDidEndDecelerating(scrollView:
UIScrollView) {
|
是不是有种豁然开朗的感觉?
过两天说说 SEL
和 Block
赶脚还是木说清楚呢,有不清楚的地方,欢迎留言探讨哈~~~