如何初始化Swift对象数组,例如。 CALayer的

时间:2015-04-12 11:59:46

标签: swift

我能够使用方法1初始化CALayer,该方法在其余代码中正常工作但不是方法2.你能告诉我什么是错的。

初始化CALayer

var layers:[CALayer]!

方法1.正在运作

layers = [CALayer(), CALayer(), CALayer(), CALayer(), CALayer(), CALayer(), CALayer(), CALayer()]

方法2.无效

layers = [CALayer](count: 8, repeatedValue: CALayer())

2 个答案:

答案 0 :(得分:6)

您可以使用map和间隔:

layers = (0..<8).map { _ in CALayer() }

_ in是一种烦恼,不应该是必要的,但Swift的类型推断目前需要它。

map方法比基于for的方法有很大的优势,因为这意味着如果不需要,您可以layers声明let稍后进一步改变:

let layers = (0..<8).map { _ in CALayer() }

对于多个appends,它的效率可能略高一些,因为数组的大小可以提前计算map,而append需要多次调整数组大小随着它的成长。

答案 1 :(得分:2)

方法2不起作用,因为初始化程序在数组的每个索引中安装完全相同的值。

您可以使用方法一,也可以使用for循环:

var layers = [CALayer]()
layers.reserveCapacity(layerCount)

let layerCount = 10
for (_ in 1... layerCount)
{
  layers.append(CALayer())
}

(我还是习惯了Swift,所以语法可能不完美,但它应该给你一般的想法)