【问题标题】:How to declare properties with a for loop in Xcode如何在 Xcode 中使用 for 循环声明属性
【发布时间】:2015-05-23 03:01:20
【问题描述】:

我有大约 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 个具有相同名称的对象?

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

【问题讨论】:

  • 如前所述,创建一个数组。您本身不会有单独的“名称”,但数组中的索引基本上就是这样。

标签: ios xcode swift for-loop uiviewcontroller


【解决方案1】:

当处理许多相同类型的对象时,而不是单独声明所有对象,您应该创建一个该对象类型的数组。在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 等更干净...

【讨论】:

    【解决方案2】:

    使用 CALayers 数组:

    var colorLayers =  [CALayer]()
    

    【讨论】:

    • 是否可以在 switch 案例中声明对象,并且在这些案例之外仍然可以访问它们?我有一个常设问题(SO Question),通过阅读您的各种答案,您似乎是合适的人选。很抱歉这么前卫。谢谢。
    • 对于任何对我的上述问题感兴趣的人(在 switch 案例中声明对象),Duncan C. 已经发布了解决方案。 (linked here).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2015-10-24
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多