Думаю, я прочитал большинство вопросов 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
.