使用 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=])
}
我有一个方法可以用来创建一个包含 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=])
}