这是一个约束的代码库,他的底层使用到了NSLayoutConstraint进行约束。那下面就对里面的代码进行一个解析。
View+SnapKit这是一个扩展(就是我们oc中的分类)是我们使用这个库的入口。为什么会选用扩展做入口,这是为了让使用者使用时简单、简洁、明确,而且这样也对与开发者有一个很好的封装空间。
ConstraintMaker这个类是具体操作约束的类,block的回调也是在这里执行。具体的方法
通过block回掉后我们在外面拿到具体操作的对象,在通过这个对象我们将要约束的一些具体数据传输过去。
在这里他使用了一个比较新颖的链式点语法。他为什么会选着这种方法,这是根据我们使用NSLayoutConstraint方法来决定的。(下面在做一个详细的说明)
上面通过block回掉的了ConstraintMaker类,ConstraintMaker这个类包含了第一次的点语法所要使用的属性。每个属性是属于ConstraintDescriptionExtendable协议的,这样是为了实现get方法的能返回对象用来做下一次的点语法,get方法过程中会实例化下一个对象和传入类型并进行储存。(协议可以处理返回逻辑但不必知道具体返回什么类型,只要你继承协议就可以了,所以这样通过性非常大只要你是用于返回都可以使用)。
通过block返回了ConstraintMaker类在调用这个类中的属性返回ConstraintDescription类,这个过程我称之为第一级。这一过程实际就是将ConstraintAttributes类中的normal存入到ConstraintDescription类中
ConstraintMaker
这一块是ConstraintAttributes类中的normal
这一块是实例化ConstraintItem类在赋值到属性中
将ConstraintItem中的数据在打包存入到ConstraintDescription
这里在是将ConstraintDescription打包存入到数组中constraintDescriptions
在这最上面是返回了一个ConstraintDescription有类的返回就可以做下一个事情了。
先讲解到这里下面的下次在进行讲解
网友评论