2016-07-22 131 views
2

我想根据XML文件的输出动态创建对象。我很抱歉,如果有关于这个问题的其他帖子,我甚至不知道这是什么。基本上我想创建一堆可以是任何类的对象。简而言之,当调用NSXMLParser的“didStartElement”时,我想创建一个类型为“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