You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sketch插件开发:如何获取图层层级及判断组的父子关系

判断MSLayerGroup父子关系的实用方案

嘿,针对你在Sketch里判断组层级关系的需求,我给你整理了几个直接好用的方法,轻松搞定父子组的识别:

核心思路:借助Sketch API的层级属性

Sketch的MSLayerGroup对象自带了和层级绑定的属性与方法,我们可以直接利用这些来判断归属关系:

1. 判断直接父子关系

每个组对象都有parentGroup()方法,它会返回当前组的直接父组(如果存在的话)。比如要验证“Child1.1 Group”是不是“Child1 Group”的直接子组,代码可以这么写:

// 假设你已经获取到child1_1Group和child1Group两个MSLayerGroup实例
if child1_1Group.parentGroup() == child1Group {
    print("Child1.1 Group是Child1 Group的直接子组")
}

2. 判断间接后代关系

如果需要识别多层嵌套的子组(比如某个组是另一个组的孙组、曾孙组),可以写个递归函数遍历父组链:

func isDescendant(of targetParent: MSLayerGroup, group: MSLayerGroup) -> Bool {
    guard let parent = group.parentGroup() else {
        // 当前组没有父组,肯定不是目标组的后代
        return false
    }
    if parent == targetParent {
        return true
    }
    // 递归向上查找父组
    return isDescendant(of: targetParent, group: parent)
}

// 使用示例
if isDescendant(of: child1Group, group: child1_1Group) {
    print("Child1.1 Group是Child1 Group的后代子组")
}

3. 结合你的选中组函数优化

如果你的函数已经能返回选中的所有MSLayerGroup,可以在遍历的时候同步收集每个组的父组信息,构建一个层级映射表,方便后续快速查询:

func collectSelectedGroupsWithHierarchy() -> [MSLayerGroup: MSLayerGroup?] {
    var groupHierarchy = [MSLayerGroup: MSLayerGroup?]()
    // 假设这是你获取选中项目的逻辑
    let selectedItems = NSApp.keyWindow()?.contentViewController()?.selection()
    for item in selectedItems {
        if let group = item as? MSLayerGroup {
            groupHierarchy[group] = group.parentGroup()
        }
    }
    return groupHierarchy
}

// 调用后快速查询父组
let hierarchyMap = collectSelectedGroupsWithHierarchy()
if let parent = hierarchyMap[child1_1Group], parent == child1Group {
    // 执行你的业务逻辑
}

额外技巧:获取完整层级路径

如果需要展示某个组的完整层级链(比如“Root Group > Child1 Group > Child1.1 Group”),可以用递归拼接父组名称:

func getFullHierarchyPath(for group: MSLayerGroup) -> String {
    guard let parent = group.parentGroup() else {
        return group.name()
    }
    return "\(getFullHierarchyPath(for: parent)) > \(group.name())"
}

// 输出示例:Root Group > Child1 Group > Child1.1 Group
print(getFullHierarchyPath(for: child1_1Group))

内容的提问来源于stack exchange,提问作者La_Concorde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:50:05