Добавьте два сторожа, чтобы подготовиться к функции перехода - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь создать свое первое приложение с тремя иерархическими таблицами.Средний VC имеет два защитных входа, один готовится к функции перехода.

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        guard let destination = segue.destination as? AddMemberViewController else {
            return
        }
        destination.club = club

        guard let Destination = segue.destination as? TransactionViewController, let selectedRow = self.tableViewMember.indexPathForSelectedRow?.row else {
            return
        }
        Destination.member = members[selectedRow]

    }

Вот так это выглядит.Могу ли я исправить это, чтобы оба приложения использовались func, потому что оно просто использует тот, что вверху.

Ответы [ 3 ]

0 голосов
/ 24 июня 2018

Просто замените охрану, если позволяет:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? AddMemberViewController {
       destination.club = club
    } else if let destination = segue.destination as? TransactionViewController, let selectedRow = self.tableViewMember.indexPathForSelectedRow?.row {
       destination.member = members[selectedRow]
    }     
}
0 голосов
/ 24 июня 2018

prepare(for вызывается для одного конкретного перехода, поэтому выполнение обоих guard let за другим излишне дорого.

Обычно вы проверяете identifier перехода с помощьюswitch, замените буквенные идентификаторы вашими реальными значениями

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  switch segue.identifier {
     case "memberSegue":
        let destination = segue.destination as! AddMemberViewController
        destination.club = club
     case "transactionSegue":
        guard let selectedRow = self.tableViewMember.indexPathForSelectedRow?.row else { return }
        let destination = segue.destination as! TransactionViewController
        destination.member = members[selectedRow]
     default: break
  }
}
0 голосов
/ 24 июня 2018

Проблема в том, что если вы хотите перейти к TransactionViewController, функция уже возвращается, потому что segue.destination не является AddMemberViewController.

Вместо этого вы должны дать своим segues разные идентификаторы и запросить их в prepareForSegue.Как то так:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "AddMemberVCSegue" {
        guard let destination = segue.destination as? AddMemberViewController else {
            return
        }
        destination.club = club
    }

    if segue.identifier == "TransactionVCSegue" {
        guard let Destination = segue.destination as? TransactionViewController, let selectedRow = self.tableViewMember.indexPathForSelectedRow?.row else {
            return
        }
        Destination.member = members[selectedRow]
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...