试图枚举数组

时间:2019-07-01 11:45:11

标签: ios swift uistackview

我将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。是

有什么想法吗?

2 个答案:

答案 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 

在上面的代码行中,subviewsArray,而您正在尝试将其解析为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(!)