Получение элемента из IBOutletCollection в Swift

Я получаю сообщение об ошибке, поскольку "Тип выражения неоднозначен без дополнительного контекста"

Вот мой код

@IBOutlet var customerDashboardButtons:[NSArray]?

var predicate = NSPredicate(format: "SELF.tag == %d", tag)
var filteredButtons = customerDashboardButtons!.filter { predicate.evaluateWithObject($0) };
if 0 < filteredButtons.count {
      var button = customerDashboardButtons!.first
      button.hidden = true // getting an error in this line as "Type of expression is ambiguous without more context
 }

Я попробовал следующее,

var button:UIButton = customerDashboardButtons!.first //Error "NSArray? is not convertible to UIButton"

var button = customerDashboardButtons!.first as UIButton //Error "NSArray? is not convertible to UIButton"

Любая помощь по этому вопросу приветствуется.

2 ответа

Решение
@IBOutlet var customerDashboardButtons:[NSArray]?

Создает массив массивов.
призвание customerDashboardButtons!.first вернет первый массив (NSArray) в вашем массиве ([…] также создам массив)

Я подозреваю, что вы хотите, чтобы ваш customerDashboardButtons быть массивом UIButtonтак вы бы использовали

@IBOutlet var customerDashboardButtons:[UIButton]?

С помощью customerDashboardButtons!.first здесь даст вам UIButton, Поскольку тип массива UIButton, вам не нужно объявлять button как UIButton.

  var button = customerDashboardButtons!.first

Будет работать, если вы измените свой массив.

Вот пример того, как создать IBOutletCollection и получить из него элемент

1) @IBOutlet var simpleTextField: [UITextField]!

2) Пример, чтобы получить textFiled из этого.

for index in 0...(simpleTextField.count - 1)  {
    let textField : UITextField = simpleTextField[index]
    textField.isUserInteractionEnabled = true
}
Другие вопросы по тегам