Тип приведения через строку - PullRequest
0 голосов
/ 01 октября 2018

Я хочу создать экземпляр класса, имя которого находится в переменной:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: viewControllerName) as UIViewController

Мне нужно привести контроллер представления:

if let specificViewController = viewController as? <what goes here?>

Пожалуйста, как мне получитьтип для кастинга?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Метод 1: Из раскадровки

Если у вас есть определенный класс для контроллера представления, он обычно отображается в раскадровке

enter image description here

Так что я бы использовал (для InstructionVC)

if let specificViewController = viewController as? <what goes here?>

Метод 2: Программно

Если вы установили Storyboard ID (как я сделал) вы можете программно найти это

var str: String! = self.restorationIdentifier

Лично я бы использовал первый метод

0 голосов
/ 01 октября 2018

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

Для этого перейдите к файлу, найдите интересующий контроллер представления и посмотрите, какой класс вы ему присвоили в Инспекторе идентификации.

Обновление:

Swift canНе справляйтесь с тем типом динамизма, о котором вы просите, это было возможно в target-c, но не в быстрой.Вы можете использовать метод NSSClassFromString, чтобы получить класс из переменной строки, но его тип возвращаемого значения по-прежнему AnyObject, поэтому нет смысла.

Обходной путь, который вы можете использовать в текущем состоянии swift::

  • Создайте базовый класс, в котором есть все необходимые методы, которые вы будете использовать совместно с наследующими VC

или

  • Создайте протокол, которыйдостигает того же

Затем вы можете создать экземпляр любого из них и вызвать все необходимые вам методы.

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