2016-07-22 195 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