Как я могу сделать оператор if, чтобы определить, какой массив использовать в tableView? - PullRequest
0 голосов
/ 05 июля 2018

Используя xcode 9.4, Swift 4 и ios 11, я хочу выбрать элемент на экране представления коллекции, который переходит к экрану представления таблицы. На экране табличного представления у меня есть ряд массивов, и, в зависимости от того, что я выбрал на экране представления коллекции, я хочу отобразить определенный массив на экране табличного представления.

Я уже настроил функцию prepareForSegue на экране представления коллекции, которая ссылается на переменную в представлении таблицы, но я немного застрял в бите "выбрать массив". Я почти уверен, что это связано с оператором if, но я не уверен, как и где поместить это заявление if.

Любая помощь будет принята с благодарностью.

Вот заявление if, которое я сделал (я не знаю, правильно ли оно):

    if cellItem == "jeans" {
        tableArray.append(jeanArray[])
    } else if cellItem == "skirts" {
        tableArray.append(skirtArray[])
    }

Затем в функциях для настройки таблицы я ссылался на tableArray.

1 Ответ

0 голосов
/ 05 июля 2018

Есть несколько способов сделать это, я предполагаю, что массивы содержат подобную информацию (догадываясь о джинсах и юбках на их одежде).

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

enum TableMode {
   case jeans, skirts, trousers, hats
}

Массив с несколькими продуктами (не рекомендуется)

class TableViewController: UITableViewController {
    var tableMode: TableMode

    func tableView(UITableView, numberOfRowsInSection: Int) -> Int {
       switch tableMode {
           case .jeans:
              return jeansArray.count
           /// and so on...
       }
    }
}

Другой вариант - использовать один массив, просто заполните его правильными данными: (лучший метод)

// the int value could be the category ID from your API 
enum TableMode: Int {
   case jeans = 13
   case skirts = 2
   trousers = 4
   hats = 19
}

class TableViewController: UITableViewController {
     var tableMode: TableMode
     var products: [Products]()

     override viewDidLoad() {
         super.viewDidLoad() 
         // fetch all data from api/database where categoryId = .tableMode value
         self.products = coreDataFetchResult
         self.tableView.reloadData()
     }

Последняя идея, выбрать все продукты и просто отфильтровать их при необходимости, чтобы показать текущий выбор типа продукта

class TableViewController: UITableViewController {
     var tableMode: TableMode
     var products: [Products]()

     override viewDidLoad() {
         super.viewDidLoad() 
         // fetch all data from core data
         self.products = coreDataFetchResult.filter { $0.categoryId = self.tableMode }
         self.tableView.reloadData()
     }

Лучший вариант зависит от того, откуда вы заполняете массивы. Я бы не советовал иметь несколько массивов, если вы собираетесь использовать только один.

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