2016-07-22 4 views
2

Я пытаюсь создать объекты динамически на основе вывода XML-файла. Мои извинения, если есть другие сообщения по этому вопросу, я даже не знаю, что это называется. В основном я хочу создать стек объектов, которые могут быть любого класса. В двух словах, когда вызывается «didStartElement» NSXMLParser, я хочу создать объект типа «elementName» и поместить его в стек объекта. Код ниже не работает, просто пытается проиллюстрировать то, что я пытаюсь выполнить. Обычно я просто добавлял объект objectStack.append (object) в качестве объекта ", но в этом случае я не знаю, каким будет тип объекта, пока элемент не будет проверен синтаксическим анализатором XML. Я считаю, что NSClassFromString - это способ сделать это, но он не работает.Swift: Создание динамического объекта

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 

    objectStack.append(NSClassFromString(elementName)) 

} 

Любая помощь была бы принята с благодарностью. Даже если вы можете просто указать мне в правильном направлении.

+0

Когда вы говорите, он не работает? Какая ошибка вы получаете? Я думаю, вам нужно на самом деле выделить & init объект, попробуйте 'objectStack.append (NSClassFromString (elementName)())' обратите внимание на дополнительный '()'. – sbarow

+1

Просто решил проблему, я был очень близок. Мне просто нужно добавить имя проекта перед именем элемента. Рабочий код. – GED125

ответ

1

Получил это, проблема в том, что мне было нужно полное имя класса с именем проекта.

Рабочий код:

var objectStack = [AnyClass]() 
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 

    var className = String(NSString(format: "MyProject.%@", elementName)) 
    objectStack.append(NSClassFromString(className)!) 
} 
+0

Это работает для псевдонима NSObject, AnyObject, Any, struct и/или типа. –

+0

Честно говоря, я не пробовал. Я использовал это только в NSObject. Мой код снова изменился, чтобы начать объект. Я могу опубликовать обновленный код, если вы хотите. – GED125

Смежные вопросы