gpt4 book ai didi

ios - 如何在 Xcode 中使用 for 循环声明属性

转载 作者:行者123 更新时间:2023-11-28 10:23:49 25 4
gpt4 key购买 nike

我有大约 80 个 CALayer 属性需要添加到 UIViewController,我想知道是否有人知道使用 for 循环执行此操作的方法,而不是像这样复制和粘贴 80 行代码:

var colorButton1 = CALayer()
var colorButton2 = CALayer()
var colorButton1 = CALayer()
var colorButton2 = CALayer()
var colorButton1 = CALayer()
var colorButton2 = CALayer()
........(colorbuttons go to 60)

我知道如何在 viewDidLoad 方法中使用 for 循环创建对象,如下所示:

    let colorLayers = 60
var colorLayer = CALayer()
var buttonYPosition:CGFloat = 0.0

for colorNum in 1...60 {

buttonYPosition = buttonYPosition + 50
colorLayer.contents = UIImage(contentsOfFile:NSBundle.mainBundle().resourcePath!.stringByAppendingPathComponent("color\(colorNum).png"))!.CGImage
colorLayer.frame = CGRectMake(device.x/2, buttonYPosition, worldScale * 380, worldScale * 180)
colorLayer.zPosition = 6.0
self.view.layer.addSublayer(colorLayer)
}

但这些不是属性。

那么我怎样才能把这样的东西放在我的脚本的顶部,以便它创建具有 60 个不同索引名称的 60 个属性,而不是 60 个具有相同名称的对象?

我什至不确定这是否可行,我只是希望压缩我的代码。

最佳答案

当处理许多相同类型的对象时,与其单独声明所有对象,不如创建一个该对象类型的数组。在 CALayer 的情况下,您可以使用 count:repeatedValue 初始化程序初始化 60 个对象的数组,如下所示:

var layers = [CALayer](count: 60, repeatedValue: CALayer())

override func viewDidLoad() {
super.viewDidLoad()

// Access all layers
for layer in layers {
// Do something
}

// Access an individual layer
layers[0].frame = CGRectZero
}

请注意,您使用下标表示法访问各个层,这比使用 layer1、layer2、layer3 等更简洁...

关于ios - 如何在 Xcode 中使用 for 循环声明属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30408454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com