ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SnapKit 类图

2021-05-30 22:06:32  阅读:211  来源: 互联网

标签:constraintsSet 类图 约束 internal var SnapKit ConstraintDescription ConstraintViewDS


SnapKit 类图

如图上图所示,居于中心的是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,从而生成约束。

posted on 2018-12-30 12:02  花老????  阅读(251)  评论(0)  编辑  收藏

标签:constraintsSet,类图,约束,internal,var,SnapKit,ConstraintDescription,ConstraintViewDS
来源: https://blog.51cto.com/u_15223551/2834070

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有