SnapSh0t
@SnapSh0t
iOS-Developer

Как передать данные между двумя view controllers, indexPathForSelectedRow swift3?

Здравствуйте, друзья. У меня ошибка в передаче данных между двумя view controllers.
В "TheChoiseOfShipTableViewController" хранятся данные в классе:

let ships: [Ships] = [
        Ships(name: "Сухогрузное судно общего назначения", image: "Сухогрузное судно общего назначения.png"),
        Ships(name: "Морское рефрижераторное судно", image: "Морское рефрижераторное судно.png")
]

Их нужно передать в "CalculateViewController", там такая реализация:

var ships: Ships!

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let identifier = "Cell"
        let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) as! DetailsTableViewCell
    
        //отображение информации в ячейках
        switch indexPath.row {
        case 0:
            cell.keyLabel.text = "Название"
            cell.valueLabel.text =ships.name
        default:
            cell.keyLabel.text = ""
            cell.valueLabel.text = ""
        }
        
        return cell
    }

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showDetails" {
            if let destination = segue.destination as? TheChoiseOfShipTableViewController {
                let indexPath = CalculateViewController.indexPathForSelectedRow!
                destination.ships = self.ships[indexPath.row]
            }
        }
    }


Ошибка что он ругается на ships..name, потому что она равно nil. Нужно передать данные, но у меня ошибка в indexPathForSelectedRow. Подскажите как грамотно нужно реализовать последний кусок кода для передачи данных.
  • Вопрос задан
  • 332 просмотра
Решения вопроса 1
@iFamily
Expert in Server-Side-Swift and iOS development
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showDetails" {
            if let destination = segue.destination as? TheChoiseOfShipTableViewController,
               let cell = sender as? UITableViewCell,
               let indexPath = tableView.indexPath(for: cell) {
                destination.ships = self.ships[indexPath.row]
            }
        }
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
briahas
@briahas
ObjC, Swift, Python
ругается на ships..name, потому что она равно nil.
Наверное ж потому что вы его не заполнили. Как вы передаете ships..name в CalculateViewController ?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы