试图枚举数组



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

在上面的代码行中,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(!)

相关内容

  • 没有找到相关文章

最新更新