首页 > 解决方案 > 遍历 Swift 中的嵌套堆栈

问题描述

我希望能够更改 iOS 中按钮的颜色,这些按钮位于任意数量的水平堆栈内,这些水平堆栈位于单个垂直堆栈内。

我正在考虑做这样的事情

for view in self.view.subviews as [UIView] {
    if let hstack = view as? UIStackView {
        for btn in hstack.arrangedSubviews {
            if let btn = view as? UIButton {
                btn.backgroundColor = UIColor.red
            }
        }
    }
}

但我收到一条警告线

“从未使用过不可变值 'btn';考虑用 '_' 替换或删除它”

标签: swiftfor-loopuiview

解决方案


您有 2 个名为 的常量btn。第一个由for循环创建,第二个由if let. 不使用循环forbtn

我建议您这样编写代码:

for case let hstack as UIStackView in self.view.subviews {
    for case let btn as UIButton in hstack.arrangedSubviews {
        btn.backgroundColor = .red
    }
}

这使用模式从数组中选择特定类型的项目。第一个循环只选择那些类型为 的子视图UIStackView。内部循环仅选择类型为 的排列好的子视图UIButton


推荐阅读