我将mainStack
作为UIStackView
。此堆栈包含4个UIStackViews
。这两个堆栈中的每一个都包含2个按钮。我正在尝试使用此代码来通过枚举找到这些按钮:
// get the subviews of the main stack
let subviews = mainStack!.arrangedSubviews as Array
// enumerate each one
for subStack in subviews as UIStackView { // 1
let buttons = subStack.subvies
}
我在//1
上有一个错误:
在 胁迫
为什么?主要堆栈的子视图是UIStackViews
。ARE
有什么想法?
"主堆栈的子视图是uistackViews"
stackView也可能包含其他UI元素。您可以将模式与for循环匹配,例如此
for case let stackView as UIStackView in mainStackView.arrangedSubviews {
for case let button as UIButton in stackView.arrangedSubviews {
button.addTarget...
}
}
为什么要错误?
for subStack in subviews as UIStackView
在上面的代码行中,subviews
是Array
,您正在尝试将其解析为UIStackView
。这就是它给出编译器错误的原因。
解决方案:
您可以简单地喜欢,
if let subviews = mainStack?.arrangedSubviews as? [UIStackView] {
subviews.forEach { (subStack) in
let buttons = subStack.arrangedSubviews as? [UIButton]
//add your code here...
}
}
注意:使用 if-let
来解开 optionals
而不是 force unwrapping(!)
。