Попытка перечислить массив - PullRequest
2 голосов
/ 01 июля 2019

У меня есть 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 с сообщением:

Невозможно преобразовать значение типа '[UIView] ', чтобы ввести' UIStackView 'в принудительном порядке

Почему это так?Подвиды основного стека: UIStackViews .are

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 01 июля 2019

«Подвидами основного стека являются UIStackViews»

Представление стека может также содержать другие элементы пользовательского интерфейса. Вы можете использовать case patterns с циклом for следующим образом:

for case let stackView as UIStackView in mainStackView.arrangedSubviews  {
    for case let button as UIButton in stackView.arrangedSubviews {
        button.addTarget...
    }
}
2 голосов
/ 01 июля 2019

Почему ошибка?

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(!) их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...