声明许多常量?迅速

时间:2020-06-24 16:01:14

标签: swift constants

我正在使用自定义.xib视图,该视图在stackView中可重复使用,具体取决于数组包含的条目数量:

不实际,只是示例数组:

let array = [“第一”,“第二”,“第三”]

for i in 1...array.count
{
let view = MyCustomView()
view.label.text = array[i-1]
stackView.addArrangedSubview(view)
}

以后通过功能为每个不同的视图更改label.text的最佳方法是什么?

我可以将顶部的视图声明为:

let view1 = MyCustomView() 
let view2 = MyCustomView()
let view3 = MyCustomView()
...

但是随后我将不得不声明很多我可能不会使用的视图,只是为了确保有足够的计数并能够更改标签。

是否有快速的方法或字典样式声明view [1]等?

2 个答案:

答案 0 :(得分:0)

您可以创建一个[MyCustomView]类型的空数组。创建它们时,将新的MyCustomView附加到此数组中。

声明为:

let array = ["first", "second", "third"]
var myCustomViews = [MyCustomView]()

并在创建新MyCustomView时附加它们:

for i in 0..<array.count {
    let view = MyCustomView()
    myCustomViews.append(view)
    view.label.text = array[i]
    stackView.addArrangedSubview(view)
}

以后,您可以按以下方式访问它们:

myCustomViews[1].text = "New text"

答案 1 :(得分:0)

您可以直接从堆栈视图访问视图,因为它们按照您添加视图的顺序进行保存,因此您不需要为它们或数组提供一些其他属性。

stackView.arrangedSubviews

设置标签的一种方法是遍历arrangedSubviews数组

for (index, view) in stackView.arrangedSubviews.enumerated() {
    if let myView = view as? MyCustomView {
        myView.label.text = array[index]
    }
}

,或者如果您知道索引,则单独

if let view = stackView.arrangedSubviews[i] as? MyCustomView {
    view.label.text = array[i]
}

在两种情况下,您都需要进行一些验证,以验证索引值没有超出范围。

相关问题