我能够使用方法1初始化CALayer,该方法在其余代码中正常工作但不是方法2.你能告诉我什么是错的。
初始化CALayer
var layers:[CALayer]!
方法1.正在运作
layers = [CALayer(), CALayer(), CALayer(), CALayer(), CALayer(), CALayer(), CALayer(), CALayer()]
方法2.无效
layers = [CALayer](count: 8, repeatedValue: CALayer())
答案 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,所以语法可能不完美,但它应该给你一般的想法)