Swift中如何将指定坐标存入数组?Playgrounds批量放置Block优化问询
简化Swift Playgrounds中批量放置Block的代码
当然可以!这种重复编写16次相同逻辑代码的场景,正好是数组存储坐标+循环遍历的用武之地,既能让代码更简洁,后续维护也方便很多。我给你两种实用的实现思路:
方法一:直接遍历坐标数组(无需扩展)
先把所有需要放置Block的坐标存成元组数组,再遍历数组逐个调用原有的place(_:atColumn:row:)方法:
// 定义所有目标坐标,把16个坐标依次填在这里 let blockCoordinates = [ (column: 1, row: 6), (column: 2, row: 6), (column: 3, row: 5), (column: 4, row: 5), // 继续添加剩下的12个坐标... ] // 遍历数组批量放置Block for coordinate in blockCoordinates { world.place(Block(), atColumn: coordinate.column, row: coordinate.row) }
方法二:扩展World类实现你想要的简化写法
如果你希望写法完全贴合world.place(Block(), at: coordinate)的预期,可以给world对象的类型(假设是World类)添加一个扩展,封装一个接收坐标元组的便捷方法:
// 扩展World类,添加自定义的place方法 extension World { func place(_ block: Block, at coordinate: (column: Int, row: Int)) { // 内部调用原有的方法完成逻辑 self.place(block, atColumn: coordinate.column, row: coordinate.row) } } // 现在就能用你想要的简洁写法批量放置了 for coordinate in blockCoordinates { world.place(Block(), at: coordinate) }
额外小贴士
- 后续如果需要调整某个Block的位置,只需要修改
blockCoordinates数组里对应的元组即可,不用重复修改16次代码; - 如果要给所有Block添加额外属性(比如颜色、特殊类型),只需要在循环里修改
Block()的初始化逻辑,一次修改就能应用到所有Block。
内容的提问来源于stack exchange,提问作者user9615134
相关产品推荐
相关产品推荐

