Можно ли заставить компилятор видеть имя VC (из строки) как этот тип VC? - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь сделать функцию, которая получает имя (String) View Controller, а затем представляет этот View Modeler модально.Пример:

func presentViewControllerModally(newViewControllerName: String){

     let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
     let newViewController = storyBoard.instantiateViewController(withIdentifier: "\(newViewControllerName)_Identifier") as! newViewControllerName
     self.present(newViewController, animated: false, completion: nil)
}

Но я не могу заставить as! newViewControllerName работать так, как будто newViewControllerName - это тип newViewControllerName, а не сам объект.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Если вам нужно получить реальный тип viewController взамен, просто используйте для этого дженерики.

func presentViewControllerModally<T: UIViewController>(newViewControllerName: String) -> T? {
    let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    if let newViewController = storyBoard.instantiateViewController(withIdentifier: "\(newViewControllerName)_Identifier") as? T {
        self.present(newViewController, animated: false, completion: nil)
        return newViewController
    }
    return nil
}

Затем вызовите

let myVC: MyVController = presentViewControllerModally(newViewControllerName: "MyVC")

Если вы этого не сделаетенужен правильный тип, но только UIViewController, вам не нужно приведение .

0 голосов
/ 13 февраля 2019

Вам не нужно понижать контроллер до своего пользовательского подкласса.Вы можете просто представить UIViewController.

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