Не в состоянии получить доступ к значению от дженериков - PullRequest
0 голосов
/ 30 мая 2019

Я перемещаюсь от viewcontroller A к viewcontroller B следующим образом.

 @IBAction func companyListTapped(_ sender: Any) {
    let viewcontrollerB = Bundle.main.loadNibNamed(String(describing: ListViewController.self),
                                                      owner: self,
                                                      options: nil)?[0] as! viewcontrollerB

  self.navigationController?.pushViewController(viewcontrollerB, animated: true)
  }

Теперь, во время навигации, я также хочу передать модель и табличную ячейку в viewcontroller B. Итак, для этого ясделал обобщенную функцию и получил к ней доступ так ...

Функция такая ...

func doSomething<M,T>(_ a: M.Type, myType: T.Type) {
    print(M.self)
    print(T.self)
  }

Доступ к ней так ...

@IBAction func companyListTapped(_ sender: Any) {
    let viewcontrollerB = Bundle.main.loadNibNamed(String(describing: ListViewController.self),
                                                      owner: self,
                                                      options: nil)?[0] as! ViewControllerB
    doSomething(Company.self, myType: CompanyCell.self) -> //Accessed here
  self.navigationController?.pushViewController(viewcontrollerB, animated: true)
  }

Теперь печатьM.self и T.self дают мне Company и CompanyCell, которые являются моей моделью и ячейкой просмотра таблицы соответственно.Но как я передам эти два значения, то есть Company и CompanyCell, моему контроллеру представления B, который я не могу выяснить.Надеюсь, кто-нибудь может помочь ...

1 Ответ

0 голосов
/ 30 мая 2019

В этом случае вам не нужны генерики. Вам просто нужно передать значения из Source View Controller ListViewController в Destination View Controller ViewControllerB

class ListViewController: UIViewController {

    @IBAction func companyListTapped(_ sender: Any) {

        let viewcontrollerB = Bundle.main.loadNibNamed(String(describing: ListViewController.self),
                                                       owner: self,
                                                       options: nil)?[0] as! ViewControllerB

        // Assuming you have companyObject and companyCellObject of type Company and CompanyCell respectively   
        viewcontrollerB.companyObject = companyObject // replace objects here
        viewcontrollerB.companyCellObject = companyCellObject // and here

        navigationController?.pushViewController(viewcontrollerB, animated: true)

    }

}

class ViewControllerB : UIViewController {

    // Assuming you have types with the same name
    var companyObject: Company?
    var companyCellObject: CompanyCell?

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...