Swift - назначить X массив данных для его раздела - PullRequest
1 голос
/ 09 мая 2019

У меня есть 2 массива данных, которые мне нужно отобразить «отфильтрованные» по его «сегменту» (Pyme / Empresa).

Структура массива ArrayType(Pyme/Empresa) = [["Name","Rut","Segment"]]

Pyme Array:

[["CAROLINA LORETO", "193843932", "Pyme"], ["CAROLINA LORETO", "3946758", "Pyme"]]

Empresa Array:

[["Banco ITAU", "8474938", "Empresa"]]

Самое близкое, что я получил, это отобразить все данные, используя следующие массивы, но он не фильтрует данные.(2 «Pymes» и 1 «Empresa» мне нужно отобразить в этом случае)

NameArray: ["Carolina Loreto", "Carolina Loreto", "Banco Itau"]

RutArray: ["193843932", "3946758", "8474938"]

SegmentArray: ["Pyme", "Pyme", "Empresa"]

SectionArray: ["Portal Pymes", "Portal Empresas"]

iPhone image

1 Ответ

0 голосов
/ 09 мая 2019

Создайте структуру Person со значениями name, rut, segment, section.Затем создайте экземпляры лиц с соответствующими значениями и сохраните их в массиве allPersons

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

class TableViewController: UITableViewController {

    struct Person {
        enum Segment: String {
            case pyme = "Pyme"
            case empresa = "Empresa"
        }
        enum Section: String {
            case portalPymes = "Portal Pymes"
            case portalEmpresas = "Portal Empresas"
        }
        var name: String
        var rut: String
        var segment: Segment
        var section: Section
    }
    var allPersons = [Person]()
    var filteredPersons = [Person]()
    override func viewDidLoad() {
        super.viewDidLoad()
        allPersons = [Person(name: "CAROLINA LORETO", rut: "193843932", segment: .pyme, section: .portalPymes),
                    Person(name: "CAROLINA LORETO", rut: "3946758", segment: .pyme, section: .portalPymes),
                    Person(name: "Banco Itau", rut: "8474938", segment: .empresa, section: .portalEmpresas)]
        //without segment filter
        filteredPersons = allPersons
        //filter pyme segment
        //filteredPersons = allPersons.filter { $0.segment == .pyme }
        //filter empresa segment
        //filteredPersons = allPersons.filter { $0.segment == .empresa }
    }

    // MARK: - Table view data source
    override func numberOfSections(in tableView: UITableView) -> Int {
        if filteredPersons.map({ $0.section }).contains(.portalPymes) && filteredPersons.map({ $0.section }).contains(.portalEmpresas) {
            return 2
        } else if filteredPersons.map({ $0.section }).contains(.portalPymes) || filteredPersons.map({ $0.section }).contains(.portalEmpresas) {
            return 1
        }
        return 0
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if filteredPersons.map({ $0.section }).contains(.portalPymes) && filteredPersons.map({ $0.section }).contains(.portalEmpresas) {
            if section == 0 {
                return filteredPersons.filter({ $0.section == .portalPymes }).count
            } else {
                return filteredPersons.filter({ $0.section == .portalEmpresas }).count
            }
        } else if filteredPersons.map({ $0.section }).contains(.portalPymes) {
            return filteredPersons.filter({ $0.section == .portalPymes }).count
        } else if filteredPersons.map({ $0.section }).contains(.portalEmpresas) {
            return filteredPersons.filter({ $0.section == .portalEmpresas }).count
        }
        return 0
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier") ?? UITableViewCell(style: .subtitle, reuseIdentifier: "reuseIdentifier")
        var person: Person?
        if filteredPersons.map({ $0.section }).contains(.portalPymes) && filteredPersons.map({ $0.section }).contains(.portalEmpresas) {
            if indexPath.section == 0 {
                person = filteredPersons.filter({ $0.section == .portalPymes })[indexPath.row]
            } else {
                person = filteredPersons.filter({ $0.section == .portalEmpresas })[indexPath.row]
            }
        } else if filteredPersons.map({ $0.section }).contains(.portalPymes) {
            person = filteredPersons.filter({ $0.section == .portalPymes })[indexPath.row]
        } else if filteredPersons.map({ $0.section }).contains(.portalEmpresas) {
            person = filteredPersons.filter({ $0.section == .portalEmpresas })[indexPath.row]
        }
        cell.textLabel?.text = person?.name
        cell.detailTextLabel?.text = "\(person!.rut) - \(person!.segment.rawValue)"
        print(person)
        return cell
    }
    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        if filteredPersons.map({ $0.section }).contains(.portalPymes) && filteredPersons.map({ $0.section }).contains(.portalEmpresas) {
            return section == 0 ? Person.Section.portalPymes.rawValue : Person.Section.portalEmpresas.rawValue
        } else if filteredPersons.map({ $0.section }).contains(.portalPymes) {
            return Person.Section.portalPymes.rawValue
        } else if filteredPersons.map({ $0.section }).contains(.portalEmpresas) {
            return Person.Section.portalEmpresas.rawValue
        }
        return ""
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...