【问题标题】:How can I make an immutable Array in swift that has different instances of the same class如何快速创建具有同一类的不同实例的不可变数组
【发布时间】:2014-07-19 14:07:02
【问题描述】:

因此,在 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()
}

是否有 Array 的构造函数接受闭包,以便我可以告诉它如何制作每个元素?

【问题讨论】:

  • hi = Hi() 没有任何意义,hi 是一个局部变量,需要赋值给array[i]。 for i in 0..x { array[i] = Hi() }
  • 它在一个循环遍历数组的for in循环中
  • 您的循环遍历数组的 contents。您需要遍历数组的索引。
  • 另外,您不能将数组的内容初始化为nil,因为这些值不是optional 值。

标签: arrays swift xcode6


【解决方案1】:

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

[Int](count: x, repeatedValue: 0).map { _ in Hi() }

或者,更简洁地说,正如@vacawama 所建议并使用 Range.map

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

【讨论】:

  • 感谢 map 方法正是我想要的 :)
  • 你可以用_代替x,因为你不会用它
  • 当你只需要一个时,你正在制作两个数组。如果x 真的很大,这可能会咬到你。试试:Array(map(1...x, { _ in Hi() }))(警告:在手机上输入,可能需要调整)
  • 不错!作为一个小组,我们想出了一个非常好的答案。这就是 StackOverflow 如此出色的原因!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
相关资源
最近更新 更多