使用 Swift 创建一个包含 N 个项目的类型化数组

Create a typed array w/ N items in it using Swift

我有一个方法可以用来创建一个包含 n 特定类型对象的数组:

func many(count: Int) -> [Cube] {
  var cubes: [Cube] = []
  for i in 0...count {
    let cube = CubeFactory.single()
    cubes.append(cube)
  }
  return cubes
}

这行得通,但我相信还有更 swift 的方法可以做到这一点。有人知道如何重构吗?

不确定这是否正是您要查找的内容,但您可以使用:

let array = map(0..<30) { _ in CubeFactory.single() }

除了 return 之外,CubeFactory.single() 实际上每次都在同一个实例上做任何事情吗?

如果它做主动的事情,return map(0..<count) { _ in CubeFactory.single() }(或许多变体)会给你一个数组。

_ in 真的不应该是必需的,但是 Swift 的类型推断在没有它的情况下会有点混乱,你会得到一个关于半开间隔的错误——重载 ..< 运算符的其他可能性——不符合 SequenceType)

如果它只是惰性的并且每个立方体都相同,那么 return Array(count: count, repeatedValue: Cube.single()) 就是您所需要的。

在Swift2中,这是

let array = (0..<30).map { _ in CubeFactory.single() }

Swift 4.2

struct Cube {
    let id:Int
}

...    

let array = (0..<24).compactMap {
    return Cube(id: [=10=])
}