Индекс textField внутри TableView


#1

Здравствуйте. У меня есть кастомная ячейка, в которой располагается label и textfield. Есть массив information = [“Имя”,“Фамилия”, “Отчество”,“Дата Рождения”, “Пол”], который передаётся в label, и другой массив с данными, которые вводятся с БД. Все поля, кроме “Отчества” являются обязательными. Нашла ранее созданную тему (Получить индекс ячейки при нажатии кнопки) для получения индекса. Хотела проверять через него, но не получается, выбивает ошибку. И в дальнейшем как к индексу обращаться. Спасибо!
http://screenshot.ru/upload/images/2017/11/28/EKRANA2017-11-28V18.43.12eba6e.png


#2
class TableViewController: UITableViewController, UITextFieldDelegate {

    private typealias Field = (
        label: String,
        text: String?
    )
    
    private var fields = [
        Field("Имя", nil),
        Field("Фамилия", nil),
        Field("Отчество", nil),
        Field("Дата Рождения", nil),
        Field("Пол", nil)
    ]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        loadData()
    }
    
    private func loadData() {
        for index in fields.startIndex..<fields.endIndex {
            switch fields[index].label {
            case "Имя":
                fields[index].text = "Иван"
            case "Фамилия":
                fields[index].text = "Иванов"
            case "Отчество":
                fields[index].text = "Иванович"
            case "Дата Рождения":
                fields[index].text = "11.11.1901"
            case "Пол":
                fields[index].text = "Обычный"
            default: break
            }
        }
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return fields.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
        let field = fields[indexPath.row]
        cell.label.text = field.label
        cell.textField.text = field.text
        cell.textField.delegate = self
        return cell
    }
    
    // MARK: - TextFieldDelegate
    
    func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
        if let cell = textField.superview?.superview as? UITableViewCell,
            let index = tableView.indexPath(for: cell)?.row {
            fields[index].text = textField.text
        }
        return true
    }
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        view.endEditing(true)
        return true
    }

    @IBAction func save() {
        view.endEditing(true)
        for field in fields {
            switch field.label {
            case "Имя":
                print("Имя: \(field.text)")
            case "Фамилия":
                print("Фамилия: \(field.text)")
            case "Отчество":
                print("Отчество: \(field.text)")
            case "Дата Рождения":
                print("Дата Рождения: \(field.text)")
            case "Пол":
                print("Пол: \(field.text)")
            default: break
            }
        }
    }
}