如何初始化对象的Swift数组,例如: CALayer
我能够使用方法1初始化CALayer,该方法在代码的其余部分正确工作,但不是方法2。请问您能否告知哪些问题。如何初始化对象的Swift数组,例如: CALayer
初始化的CALayer
var layers:[CALayer]!
方法1.工作
layers = [CALayer(), CALayer(), CALayer(), CALayer(), CALayer(), CALayer(), CALayer(), CALayer()]
方法2不工作
layers = [CALayer](count: 8, repeatedValue: CALayer())
方法2不起作用,因为初始安装的确切在数组的每个索引中都有相同的值。
您可以使用方法,或者你可以使用一个for循环:
var layers = [CALayer]()
layers.reserveCapacity(layerCount)
let layerCount = 10
for (_ in 1... layerCount)
{
layers.append(CALayer())
}
(我还是习惯斯威夫特,这样的语法可能并不完美,但它应该给你的总体思路)
您可以使用map
和区间:
layers = (0..<8).map { _ in CALayer() }
的_ in
是一个烦恼,不应该是必要的,但斯威夫特的类型推断铜rrently需要它。
的map
方法有超过for
为基础的方法的一大优势,因为这意味着你可以用let
声明layers
如果不打算就需要以后进一步发生变化:
let layers = (0..<8).map { _ in CALayer() }
它也可能相对于多个appends
,效率稍高一些,因为阵列的大小可以提前计算map
,而append
需要随着其增长调整阵列大小。
我比你更喜欢你的方法。 (我编辑了我的代码以保留要创建的图层数量的容量,但是map语句在一行中完成了相同的操作。顺便提一下,我必须知道,拉登还是空载? –
非洲或欧洲? –
什么?不知道!Aieeeee ... –
@AirspeedVelocity,它看起来像没有minimumCapacity初始值设定为数组像字典?看起来像一个遗漏。我敢打赌,创建一个数组,然后扩展它的容量做2次分配,'Dictionary(minimumCapacity)'形式只做一次分配。 –