NSClassFromString в Swift 2.1

Думаю, я прочитал большинство вопросов SO и ответов Google по этому поводу, но все еще не могу заставить его работать. Возьмите этот пример кода:

import UIKit

class Person: NSObject {

    var name = "Pieter"

}

let PersonClass: AnyClass? = NSClassFromString("Person")
let person = PersonClass()
print(person.name)

Замена NSClassFromString("Person") на NSClassFromString("MyAppName.Person") ничего не меняет. Добавление as! NSObject.Type за объявлением PersonClass также. Добавление @obcj(Person перед объявлением класса тоже.

Реальная цель состоит в том, чтобы прочитать имена классов из базы данных и соответственно загрузить соответствующую раскадровку/UIViewController. Поэтому я ищу способ передать имя класса UIViewController в виде строки и создать с ним экземпляр UIStoryboard.

Как это сделать?

Изменить: вот что я сейчас пытаюсь использовать в реальном сценарии после ваших предложений:

let storyboard = UIStoryboard(name: "MyStoryboard", bundle: nil)
let MyClassName = "MyApp.MyTableViewController"
let MyClass = NSClassFromString(MyClassName) as! UITableViewController.Type
let controller = storyboard.instantiateInitialViewController() as! MyClass

Выдает ошибку "MyClass" is not a type. Я не могу удалить его, иначе я получу ошибку, что он не может преобразовать из AnyClass.


person Pieter    schedule 28.12.2015    source источник
comment
Вы проверили все ответы из stackoverflow.com/questions/24030814/? Это выглядит близко к тому, что вы хотите: stackoverflow.com/a/32265287/1187415.   -  person Martin R    schedule 28.12.2015
comment
Смотрите поправку в моем посте...   -  person Pieter    schedule 28.12.2015


Ответы (1)


Попробуйте код, указанный ниже

let viewController = storyboard?.instantiateViewControllerWithIdentifier("ViewController") as! ViewController

Этот код позволяет вам создать экземпляр контроллера представления раскадровки. Но вы не можете передать имя класса View Controller.

Вы должны передать идентификатор раскадровки контроллера представления. Пожалуйста, просмотрите изображение ниже для этого.

введите здесь описание изображения

person Sukhdeep Singh Kalra    schedule 28.12.2015
comment
Дорогой друг, пожалуйста, прочитайте его вопрос полностью. Его реальная цель — создать экземпляр класса контроллера представления из раскадровки. - person Sukhdeep Singh Kalra; 28.12.2015
comment
Пожалуйста, не голосуйте против, пока не прочитаете весь вопрос. - person Sukhdeep Singh Kalra; 28.12.2015
comment
Нет, он не. В вопросе говорится, что он хочет прочитать имя класса (а не идентификатор) из базы данных и создать экземпляр контроллера представления. - person HAS; 28.12.2015
comment
Дорогой друг, он хочет создать экземпляр класса и использует раскадровку. Но нет возможности сделать это без идентификатора при использовании раскадровки - person Sukhdeep Singh Kalra; 28.12.2015
comment
Когда вы не используете раскадровку, вы можете использовать имя класса, но в случае раскадровки мы должны инициализировать его, используя идентификатор раскадровки. - person Sukhdeep Singh Kalra; 28.12.2015