Передача данных во view model

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

Model.swift

enum UserInfo: Int, CaseIterable
{
    case name
    case gender

    var info:String?
    {
        switch self {
        case .name:
            return UserDefaults.standard.string(forKey: "userName")
        case .gender:
            return UserDefaults.standard.string(forKey: "userGender")
}
}

Также у меня есть таблица где я эти значения вывожу в ячейки. Это дело выглядит вот так.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: SettingsTableViewCell.identifier,
            for: indexPath) as? SettingsTableViewCell

        cell?.infoLabel.text = UserInfo.init(rawValue: indexPath.row)?.info

        return cell!
    }

С этим кодом я получаю в таблице информацию пользователя. Чтобы поменять имя я вызываю другой View controller , на котором пользователь в текстовом поле может сменить имя. Там я сохраняю значение в UserDefaults,но когда возвращаюсь к таблице имя остается прежнее. И менятся только после того как я перезайду в приложение. Раньше в таких ситуацыях я пользовался протоколами, но теперь у меня есть Model, и я не знаю как это реализовать.

Как я могу отобразить сразу новое имя пользователя в таблице после смены его на другом VC ?


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

Автор решения: Oleg Soloviev

Вам нужно обновить данные в tableView при возвращении на viewController, можно это сделать так:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    tableView.reloadData()
}
→ Ссылка