Arrays 如何在swift中生成具有同一类的不同实例的不可变数组

Arrays 如何在swift中生成具有同一类的不同实例的不可变数组,arrays,swift,xcode6,Arrays,Swift,Xcode6,因此,在swift中,数组和可变数组之间没有明显的区别,但Apple文档表示,当您知道元素的数量时,最好使用不可变数组。假设我想创建一个Hi类型的不可变数组,它有x个Hi类型的不同元素 我可以这样做,但它会将相同的实例分配给数组中的每个元素 var array = [Hi](count: x, repeatedValue: Hi()) 我可以这样做,但数组中的元素是允许的,因此不可编辑 var array = [Hi](count: x, repeatedValue: nil) for hi

因此,在swift中,数组和可变数组之间没有明显的区别,但Apple文档表示,当您知道元素的数量时,最好使用不可变数组。假设我想创建一个Hi类型的不可变数组,它有x个Hi类型的不同元素

我可以这样做,但它会将相同的实例分配给数组中的每个元素

var array = [Hi](count: x, repeatedValue: Hi())
我可以这样做,但数组中的元素是允许的,因此不可编辑

var array = [Hi](count: x, repeatedValue: nil)
for hi in array {
hi = Hi()
}

数组是否有一个接受闭包的构造函数,以便我告诉它如何生成每个元素?

作为一个表达式,简单地说:

[Int](count: x, repeatedValue: 0).map { _ in Hi() }
或者,更简洁地说,正如@vacawama和使用Range.map所建议的那样

(1...x).map { _ in Hi() }

hi=hi()
for i in 0..x{array[i]=Hi()}
它位于一个for-in循环中,该循环在数组上迭代。您的循环在数组的内容上迭代。你需要循环数组的索引。另外,您无法将数组的内容初始化为
nil
,因为这些值不是
可选的
值。感谢map方法正是我所要寻找的:)并且您可以使用
\uu
而不是
x
,因为您不打算使用它,所以您正在创建两个数组,而您只需要一个。如果
x
非常大,这可能会咬到你。试试:
数组(映射(1…x,{inhi()}))
(警告:在电话上键入,可能需要调整)很好!作为一个团队,我们想出了一个非常好的答案。这就是StackOverflow如此棒的原因!