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 като String и да инстанцирам 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