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

如何用字符串匹配简写语法查找前缀为square且后缀为数字的子节点?

SpriteKit 子节点名称匹配:开头为square且结尾为数字的简写语法

你写的@%square语法是错误的,SpriteKit的enumerateChildNodes(withName:)方法不支持这种Objective-C字符串格式化风格的写法,它用的是glob通配符或正则表达式前缀的简写语法来实现名称匹配。

下面是两种满足你需求的正确写法:

1. Glob通配符(简单场景)

如果你的节点名称严格是square后直接跟数字(允许多位数字),可以用glob模式快速匹配:

self.enumerateChildNodes(withName: "square[0-9]*") { node, stop in
    // 处理匹配到的节点
}
  • [0-9]匹配单个数字字符
  • *匹配后续任意数量的字符(用来兼容多位数字的情况)
    注意:这个写法会匹配类似square123的节点,但如果存在square1abc这种名称的节点也会被匹配到,适合不需要严格结尾验证的场景。

2. 正则表达式简写(精确匹配)

如果需要严格匹配以square开头、结尾必须是数字的节点,推荐用带regex:前缀的正则表达式语法,这是最精确的方式:

self.enumerateChildNodes(withName: "regex:^square\\d+$") { node, stop in
    // 处理匹配到的节点
}

正则规则解释:

  • ^ 匹配字符串的开头
  • square 固定匹配前缀文本
  • \\d+ 匹配一个或多个数字(\\d代表数字,+表示至少出现一次)
  • $ 匹配字符串的结尾
    这种写法只会匹配square1、square123这类符合规则的节点,像square、squareabc、square1abc都会被排除。

完整示例代码

let someSquare = SKShapeNode()
someSquare.name = "square1"

let someOtherSquare = SKShapeNode()
someOtherSquare.name = "square2"

let nonMatchNode = SKShapeNode()
nonMatchNode.name = "squareabc"

self.addChild(someSquare)
self.addChild(someOtherSquare)
self.addChild(nonMatchNode)

// 精确匹配符合规则的节点
self.enumerateChildNodes(withName: "regex:^square\\d+$") { node, stop in
    print("匹配到节点:\(node.name ?? "")")
    // 输出结果:square1、square2
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:01:34