Получение элемента из 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
}