码迷,mamicode.com
首页 > 其他好文 > 详细

SnapKit 类图

时间:2018-12-30 12:49:07      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:对象   ant   ext   避免   atom   循环   eset   nta   add   

技术分享图片?

如图上图所示,居于中心的是ConstraintDescription,它用来生成Constraint,最后再转换成系统的NSLayoutConstraint

ConstraintDescription

包含约束必备的所有因素

    internal let item: LayoutConstraintItem
    internal var attributes: ConstraintAttributes
    internal var relation: ConstraintRelation? = nil
    // 记录产生约束的位置
    internal var sourceLocation: (String, UInt)? = nil
    // 标签
    internal var label: String? = nil
    internal var related: ConstraintItem? = nil
    internal var multiplier: ConstraintMultiplierTarget = 1.0
    internal var constant: ConstraintConstantTarget = 0.0
    internal var priority: ConstraintPriorityTarget = 1000.0

当前的item(一般是UIView) 的什么属性 attributes 要和哪个目标(related)发生什么关系(relation),优先级是什么(priority),具体要怎么发生关系(multiplierconstant)

Constraint

SnapKit的约束对象,用于生成NSLayoutConstraint
仅通过 ConstraintDescription 生成。

LayoutConstraintItem

即被约束的对象,在iOS开发中,即为UIView
通过关联对象的方法,持有了很多Constraint

private var constraintsSet: NSMutableSet {
    let constraintsSet: NSMutableSet
    
    if let existing = objc_getAssociatedObject(self, &constraintsKey) as? NSMutableSet {
        constraintsSet = existing
    } else {
        constraintsSet = NSMutableSet()
        objc_setAssociatedObject(self, &constraintsKey, constraintsSet, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    }
    return constraintsSet
    
}

也有add(constraints)remove(constraints) 等方法,但是仅供框架内部调用。

ConstraintItem

被约束的对象+被约束的属性。
??,它有一个weak属性,一般指向了UIView,避免了循环引用。
这个类,在创建约束时,被大量使用。

ConstraintMaker

它提供了静态方法来创建ConstraintDescription,然后根据ConstraintDescription 来生成Constraint

ConstraintViewDSL

即我们调用的snp。它并不是UIView的存储属性,和函数调用更加接进。每一次调用snp,都会生成一个ConstraintViewDSL 结构体。

public extension ConstraintView {
    ...    
    public var snp: ConstraintViewDSL {
        return ConstraintViewDSL(view: self)
    }
}

它提供了我们常用的方法,比如makeConstraintsupdateConstraintsprepareConstraints等。
这些方法,最终都调用了ConstraintMaker 的方法,来生成约束。

ConstraintDSL 协议

ConstraintViewDSL遵守,用来产生各种ConstraintItem,从而生成约束。

SnapKit 类图

标签:对象   ant   ext   避免   atom   循环   eset   nta   add   

原文地址:https://www.cnblogs.com/huahuahu/p/SnapKit-lei-tu.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!