Изменение быстрой UILabel при изменении элементов в массиве - PullRequest
0 голосов
/ 10 октября 2019

У меня есть проблема, которую я не могу решить: у меня есть 2 файла, один с массивом элементов (имен и изображений), и другой файл, где я пытаюсь вызвать элементы массива, чтобы изменить текст в UILable.

код массива во втором файле:

var items: [ItemInfo] = [("AAZ-2", "AAZ-02"), ("BACT01", "Anti-Bacterial"), ("FK01", "Fresh Keeping"), ("mouse", "Anti-Rodents"), ("RIC01", "Anti-VOC"), ("UV01", "UV Protection")]

В другом файле для доступа к переменной и массиву из другого файла я создал это:

let demoViewController: DemoViewController = DemoViewController()

Теперь я создаю функцию, в которой я получаю код для вызова файла из массива

func newLable(){
     if demoViewController.items.enumerated().first(where: {$0.element.title == "AAZ-02"}) != nil{
           textLabel.text = "text1"

    }else if demoViewController.items.enumerated().first(where: {$0.element.title == "Anti-Bacterial"}) != nil{
               textLabel.text = "tex2"

    }

Но каждый раз пытаюсь запустить приложение, когда я переключаю элемент между первым (элементом массива)и второй я получаю тот же текст на этикетке (вывод: text1, как в коде).

Спасибо всем за помощь заранее

1 Ответ

1 голос
/ 10 октября 2019

Полагаю, вы неправильно понимаете, что означает «первый».

Первый не означает найти элемент по первому индексу , но означает, что находит первыйэлемент (с любым индексом), который соответствует вашему поиску .

Поэтому, когда вы запрашиваете в своем массиве «первый» элемент, который удовлетворяет вашему предикату (например, равен «AAZ-02»), тогда он будетвсегда находите ответ независимо от того, где именно находится этот элемент. Поэтому, когда вы переключаете первые два элемента, эта функция найдет элемент, хотя он имеет более высокий индекс. А это значит, что ваш путь "else" никогда не будет выполнен.

Вам лучше попробовать это:

// Pass in your itemInfo you want to search for 
func newLabel(forItem item : ItemInfo) {

     // search the first occurrence of your item
     if demoViewController.items.enumerated().first(where: {$0.element.title == item.title}) != nil {

         // if found -> set the itemInfo as the labelTitle
         textLabel.text = item.title
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...