本篇主要回顾一下--iOS函数式编程 && 响应式编程概念 ,如何一步步实现函数式编程的过程,对阅读Masonry && SnapKit
源码有一定的帮助。
作为一个iOS 开发者,那么你一定用过Masnory/ SnapKit;
1
|
make
.
centerY
.
equalTo
(
self
.
view
)
.
offset
(
100
)
;
|
就是这个“.”让Masonry更加鲜活的展示给了开发者,在我心中
Masnory/ SnapKit函数式编程的一个经典的代表作,非常值得参考和学习!
链式编程的好处不用再说了,用过Masnory/ SnapKit的都知道;
一步步来实现一个函数式编程
1
2
|
-
(
void
)
run
;
-
(
void
)
study
;
|
1
2
3
4
5
6
|
-
(
void
)
run
{
NSLog
(
@
"run"
)
;
}
-
(
void
)
study
{
NSLog
(
@
"study"
)
}
|
1
2
3
|
Person*
person
=
[
[
Personalloc
]
init
]
;
[
personrun
]
;
[
personstudy
]
;
|
最终目标
1
2
|
person
.
runBlock
(
)
.
studyBlock
(
)
.
runBlock
(
)
;
person
.
studyBlock
(
)
.
studyBlock
(
)
.
runBlock
(
)
;
|
分解目标
1.先实现这种方式调用
1
|
[
[
person
run1
]
study1
]
;
|
2.再实现最终目标
显然,如果想要实现[person run1]调用一个方法,那么run1就需要一个返回一个对象,让这个对象去调用study1。
这样分析后,就简单了,就是增加一个返回值。
代码
方法的声明
12 - ( Person* ) run1 ;- ( Person* ) study1 ;方法的实现
12345678 - ( Person* ) run1 {NSLog ( @ "run" ) ;return [ [ Personalloc ] init ] ;}- ( Person* ) study1 {NSLog ( @ "study" ) ;return [ [ Personalloc ] init ] ;}
实现最终目标:
1
|
person
.
runBlock
(
)
.
studyBlock
(
)
.
runBlock
(
)
;
|
在OC中,`()`block是以()
的形式去执行的,猜想如果返回一个block的话,那么我就可以用()
来实现runBlock()这种效果了吧!
再结合我们的分解步骤,runBlock()代表执行了一个block,如果这个block的返回值的是一个对象的话,那么调用另外一个方法;这样就可以一直链接下去吧!实现了我们想要的目标!
代码:
声明
12 - ( Person* ( ^ ) ( ) ) runBlock ;- ( Person* ( ^ ) ( ) ) studyBlock ;
实现:
1234567891011121314 - ( Person* ( ^ ) ( ) ) runBlock {Person* ( ^ block ) ( ) = ^ ( ) {NSLog ( @ "run" ) ;return self ;} ;return block ;}- ( Person* ( ^ ) ( ) ) studyBlock {Person* ( ^ block ) ( ) = ^ ( ) {NSLog ( @ "study" ) ;return self ;} ;return block ;}
再来看一下Masonry的一个函数式编程
1
|
make
.
right
.
equalTo
(
self
.
right
)
.
insets
(
kPadding
)
;
|
最终调用的函数:
返回的就是一个返回值为MASConstraint的block
1
2
3
4
5
|
-
(
MASConstraint*
(
^
)
(
id
)
)
equalTo
{
return
^
id
(
idattribute
)
{
return
self
.
equalToWithRelation
(
attribute
,
NSLayoutRelationEqual
)
;
}
;
}
|
在网上流传一个非常经典的解释`响应式编程的概念`
在程序开发中:
a = b + c
赋值之后 b 或者 c 的值变化后,a 的值不会跟着变化
响应式编程,目标就是,如果 b 或者 c 的数值发生变化,a 的数值会同时发生变化;
在上篇博客中《iOS-Reactive Cocoa的常见用法》
Reactive Cocoa就是一个响应式编程的经典作品!