【问题标题】:Trying to enumerate an array试图枚举一个数组
【发布时间】:2019-07-01 11:45:11
【问题描述】:

我有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.are

有什么想法吗?

【问题讨论】:

  • 你为什么还要使用 NSArray 而不是 Swift 数组?
  • 糟糕,抱歉。使用目标 C 11 年。我已经更正了代码,但问题仍然存在,但现在出现了不同的消息。

标签: ios swift uistackview


【解决方案1】:

"主栈的子视图是 UIStackViews"

stackview 也可能包含其他 UI 元素。你可以像这样在 for 循环中使用pattern matching

for case let stackView as UIStackView in mainStackView.arrangedSubviews  {
    for case let button as UIButton in stackView.arrangedSubviews {
        button.addTarget...
    }
}

【讨论】:

    【解决方案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(!)

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 2013-08-16
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多