2016-07-22 6 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、構造体、および/または型エイリアスで機能しますか? –

+0

正直言って私は試していません。私はNSObjectでのみこれを使用しました。私のコードは、オブジェクトを初期化するために再び変更されました。あなたが望むなら、私は更新されたコードを投稿することができます。 – GED125

関連する問題