     private init() {}
 
     // TODO: Set vs Array (performance) ?
+    // TODO: 看吧，到底用不用遍历全部约束？甚至从来没有一个 Dependency.hasSet -> false 的情况发生！
     /// 全部约束
     var dependencies = Set<Dependency>()
 

    var dependencyHolder: Dependency?

    /// 未设定约束相关信息
    var unsetDependencyInfo : (has: Bool, unsetDependencies: [Dependency]) {
        let unsetDeps = dependencies.filter { dep in
            !dep.hasSet
        }

// MARK: Layout
private extension DependencyManager {

    // TODO: hasSetDependenciesOf 不是每次都要遍历的，可以提前生成一个渲染序列，这个渲染序列的副产品就是检查是否有依赖循环
    // TODO: 这个算法的复杂度事多少😂
    /// 核心布局方法
    func layout(views: [UIView]) {
        if hasUnsetDependenciesOf(views) {
            var layoutingViews = Set(views)
            repeat {
                _ = layoutingViews.map { view in
                    if hasSetDependenciesOf(view) {
                        view.layoutWithFangYuan()
                        setDependenciesOf(view)
                        layoutingViews.remove(view)
                    }
                }
            } while hasUnsetDependenciesOf(views)
        } else {
            _ = views.map { view in
                view.layoutWithFangYuan()
            }
        }
    }

    func hasUnsetDependenciesOf(views:[UIView]) -> Bool {

        let unsetInfo = unsetDependencyInfo

        guard unsetInfo.has else {
            return false
        }

        for view in views {
            for dep in unsetInfo.dependencies {
                if dep.to == view {
                    return true
                }
