Swift: текстовые элементы таблицы - как задавать значения одному ссылаясь на значения в другом?

введите сюда описание изображенияПомогите пожалуйста решить задачку! Есть view, в нём создан tableView, в котором определённое количество проиндексированных через extention ячеек.

В каждый ячейке есть её номер, label и ещэ один label. Есть отдельно созданный Root, там есть массив, из которого берём данные тоже. И есть куча формул, просчитывающие значения для отдельных переменных, значения которых надо разложить первый label по порядку, в соответствии с номерами. Поняла только как всё оформить и показать во вью. А как теперь соединить это всё?

class YearsViewController: UIViewController {

private let fileReadManager = FileReaderManager()
var peremennaya = ""
// и таких переменных 76 штук

@IBOutlet weak var secondTable: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

//Здесь включается метод из модели и под каждую переменную отрабатываются свои расчёты

}

    let identifier = "BirthCell"
    let array = ["0", "1-2", "2-3", "3-4", "5", "6-7", "7-8", "8-9", "10", "11-12", "12-13", "13-14", "15", "16-17", "17-18", "18-19", "20", "21-22", "22-23", "23-24", "25", "26-27", "27-28", "28-29", "30", "31-32", "32-33", "33-34", "35", "36-37", "37-38", "38-39", "40", "41-42", "42-43", "43-44", "45", "46-47", "47-48", "48-49", "50", "51-52", "52-53", "53-54", "55", "56-57", "57-58", "58-59", "60", "61-62", "62-63", "63-64", "65", "66-67", "67-68", "68-69", "70", "71-72", "72-73", "73-74", "75", "76-77", "77-78", "78-79", "80"]

    
extension UIViewController: UITableViewDataSource, UITableViewDelegate {
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return array.count
}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath)
    let number = array[indexPath.row]
    cell.textLabel?.text = number
    
    return cell    
}

}

Теперь условно говоря нужно, чтобы например в первой ячейке по её number в label отображалось соответствующее значение переменной. Я так понимаю, нужно эти 76 переменных уложить в массив, только куда его вставить в коде? и вопрос как обратиться к этому label? И к ещё одному? Потому что последний берёт своё значение из fileReadManager (там словарь, и если label = item id, то второй label - item value)

Не понимаю, как вообще их указать, эти тексты? Вообще не могу найти вразумительной информации, везде максимум одно значение и различные функции, а тут получается три. Что посоветуете попробовать?

PS - этот fileReadManager используется во всей программе, этот механизм уже отработан, там всё работает. Вопрос куда передавать значение? Как их передавать? Help

ДОПОЛНЕНИЕ

 guard let root = fileReadManager.fetchDescription() else{
        return
    }
    let dataSource = root.health
    for item in dataSource {
        if item.id == labelOneText {
            healthRootOneText = item.value
        }
            let dataSource = root.health
            for item in dataSource {
        if item.id == labelTwoText {
            healthRootTwoText = item.value
        }
                let dataSource = root.health
                for item in dataSource {
            if item.id == labelText {
                healthRootThreeText = item.value
            
    
    chakraFirstEnergyLabel.text = labelOneText
    chakraSecondEnergyLabel.text = labelTwoText
    chakraThirdEnergyLabel.text = labelText

Ответы (1 шт):

Автор решения: schmidt9

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

    let dict = [
        "33" : "text1",
        "66" : "text2",
        "99" : "text3"
    ]
    
    let array = [
        "0",
        "1-2",
        "2-3"
    ]

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

struct Item {
    
    var category: String
    var id: String
    var value: String
    
}

После этого можно создать объединяющий массив, здесь он создается вручную, но можно вероятно с помощью цикла, все зависит от реализации, и уже этот массив используем при выводе или фильтруем из него нужные данные (если массив выводится не целиком)

    var allItems: [Item]!

    func createItems() {
        allItems = [
            Item(category: "0",   id: "33", value: "text1"),
            Item(category: "1-2", id: "66", value: "text2"),
            Item(category: "2-3", id: "99", value: "text1"),
        ]
    }

Полный пример

import UIKit

struct Item {
    
    var category: String
    var id: String
    var value: String
    
}

class ViewController: UIViewController {
    
    @IBOutlet weak var secondTable: UITableView!
    
    let dict = [
        "33" : "text1",
        "66" : "text2",
        "99" : "text3"
    ]
    
    let array = [
        "0",
        "1-2",
        "2-3"
    ]
    
    var allItems: [Item]!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        createItems()
        
        secondTable.delegate = self
        secondTable.dataSource = self
        secondTable.reloadData()
    }
    
    func createItems() {
        allItems = [
            Item(category: "0",   id: "33", value: "text1"),
            Item(category: "1-2", id: "66", value: "text2"),
            Item(category: "2-3", id: "99", value: "text1"),
        ]
    }

}

extension ViewController: UITableViewDataSource, UITableViewDelegate {
    
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return allItems.count
    }
    
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        let item = allItems[indexPath.row]
        cell.textLabel?.text = item.category
        // ... присваиваем другим лейблам item.id и item.value
        
        return cell
    }

}

→ Ссылка