我将mainStack
作为UIStackView
。该堆栈包含4个UIStackViews
。这两个4个堆栈中的每个堆栈都包含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
上看到以下错误:
无法将类型'[UIView]'的值转换为类型'UIStackView' 胁迫
那是为什么?主堆栈的子视图是UIStackViews
。是
有什么想法吗?
答案 0 :(得分:3)
“主堆栈的子视图是UIStackViews”
stackview可能还包含其他UI元素。您可以将case patterns
与for循环一起使用
for case let stackView as UIStackView in mainStackView.arrangedSubviews {
for case let button as UIButton in stackView.arrangedSubviews {
button.addTarget...
}
}
答案 1 :(得分:2)
为什么出错?
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(!)
。