试图枚举一个数组
Trying to enumerate an array
我有 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
上遇到错误消息:
Cannot convert value of type '[UIView]' to type 'UIStackView' in
coercion
这是为什么?主堆栈的子视图是 UIStackViews
.are
有什么想法吗?
"The subviews of the main stack are UIStackViews"
stackview 可能还包含其他 UI 元素。您可以像这样将 pattern matching 与 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
在上面的代码行中,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(!)
它们。
我有 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
上遇到错误消息:
Cannot convert value of type '[UIView]' to type 'UIStackView' in coercion
这是为什么?主堆栈的子视图是 UIStackViews
.are
有什么想法吗?
"The subviews of the main stack are UIStackViews"
stackview 可能还包含其他 UI 元素。您可以像这样将 pattern matching 与 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
在上面的代码行中,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(!)
它们。